/*eslint-disable block-scoped-var, no-redeclare, no-control-regex, no-prototype-builtins*/
"use strict";

var $protobuf = require("protobufjs/minimal");

// Common aliases
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;

// Exported root namespace
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});

$root.AwesomeMessage = (function() {

    /**
     * Properties of an AwesomeMessage.
     * @exports IAwesomeMessage
     * @interface IAwesomeMessage
     * @property {number} meesageId AwesomeMessage meesageId
     * @property {Uint8Array|null} [data] AwesomeMessage data
     */

    /**
     * Constructs a new AwesomeMessage.
     * @exports AwesomeMessage
     * @classdesc Represents an AwesomeMessage.
     * @implements IAwesomeMessage
     * @constructor
     * @param {IAwesomeMessage=} [properties] Properties to set
     */
    function AwesomeMessage(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * AwesomeMessage meesageId.
     * @member {number} meesageId
     * @memberof AwesomeMessage
     * @instance
     */
    AwesomeMessage.prototype.meesageId = 0;

    /**
     * AwesomeMessage data.
     * @member {Uint8Array} data
     * @memberof AwesomeMessage
     * @instance
     */
    AwesomeMessage.prototype.data = $util.newBuffer([]);

    /**
     * Creates a new AwesomeMessage instance using the specified properties.
     * @function create
     * @memberof AwesomeMessage
     * @static
     * @param {IAwesomeMessage=} [properties] Properties to set
     * @returns {AwesomeMessage} AwesomeMessage instance
     */
    AwesomeMessage.create = function create(properties) {
        return new AwesomeMessage(properties);
    };

    /**
     * Encodes the specified AwesomeMessage message. Does not implicitly {@link AwesomeMessage.verify|verify} messages.
     * @function encode
     * @memberof AwesomeMessage
     * @static
     * @param {IAwesomeMessage} message AwesomeMessage message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    AwesomeMessage.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.meesageId);
        if (message.data != null && message.hasOwnProperty("data"))
            writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.data);
        return writer;
    };

    /**
     * Encodes the specified AwesomeMessage message, length delimited. Does not implicitly {@link AwesomeMessage.verify|verify} messages.
     * @function encodeDelimited
     * @memberof AwesomeMessage
     * @static
     * @param {IAwesomeMessage} message AwesomeMessage message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    AwesomeMessage.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes an AwesomeMessage message from the specified reader or buffer.
     * @function decode
     * @memberof AwesomeMessage
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {AwesomeMessage} AwesomeMessage
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    AwesomeMessage.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.AwesomeMessage();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.meesageId = reader.int32();
                break;
            case 2:
                message.data = reader.bytes();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("meesageId"))
            throw $util.ProtocolError("missing required 'meesageId'", { instance: message });
        return message;
    };

    /**
     * Decodes an AwesomeMessage message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof AwesomeMessage
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {AwesomeMessage} AwesomeMessage
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    AwesomeMessage.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies an AwesomeMessage message.
     * @function verify
     * @memberof AwesomeMessage
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    AwesomeMessage.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.meesageId))
            return "meesageId: integer expected";
        if (message.data != null && message.hasOwnProperty("data"))
            if (!(message.data && typeof message.data.length === "number" || $util.isString(message.data)))
                return "data: buffer expected";
        return null;
    };

    /**
     * Creates an AwesomeMessage message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof AwesomeMessage
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {AwesomeMessage} AwesomeMessage
     */
    AwesomeMessage.fromObject = function fromObject(object) {
        if (object instanceof $root.AwesomeMessage)
            return object;
        var message = new $root.AwesomeMessage();
        if (object.meesageId != null)
            message.meesageId = object.meesageId | 0;
        if (object.data != null)
            if (typeof object.data === "string")
                $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);
            else if (object.data.length)
                message.data = object.data;
        return message;
    };

    /**
     * Creates a plain object from an AwesomeMessage message. Also converts values to other types if specified.
     * @function toObject
     * @memberof AwesomeMessage
     * @static
     * @param {AwesomeMessage} message AwesomeMessage
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    AwesomeMessage.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.meesageId = 0;
            object.data = options.bytes === String ? "" : [];
        }
        if (message.meesageId != null && message.hasOwnProperty("meesageId"))
            object.meesageId = message.meesageId;
        if (message.data != null && message.hasOwnProperty("data"))
            object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;
        return object;
    };

    /**
     * Converts this AwesomeMessage to JSON.
     * @function toJSON
     * @memberof AwesomeMessage
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    AwesomeMessage.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return AwesomeMessage;
})();

$root.c2sLogin = (function() {

    /**
     * Properties of a c2sLogin.
     * @exports Ic2sLogin
     * @interface Ic2sLogin
     * @property {string} account c2sLogin account
     * @property {string} sign c2sLogin sign
     * @property {string} headimg c2sLogin headimg
     * @property {string} name c2sLogin name
     * @property {string} sex c2sLogin sex
     * @property {number} userId c2sLogin userId
     */

    /**
     * Constructs a new c2sLogin.
     * @exports c2sLogin
     * @classdesc Represents a c2sLogin.
     * @implements Ic2sLogin
     * @constructor
     * @param {Ic2sLogin=} [properties] Properties to set
     */
    function c2sLogin(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sLogin account.
     * @member {string} account
     * @memberof c2sLogin
     * @instance
     */
    c2sLogin.prototype.account = "";

    /**
     * c2sLogin sign.
     * @member {string} sign
     * @memberof c2sLogin
     * @instance
     */
    c2sLogin.prototype.sign = "";

    /**
     * c2sLogin headimg.
     * @member {string} headimg
     * @memberof c2sLogin
     * @instance
     */
    c2sLogin.prototype.headimg = "";

    /**
     * c2sLogin name.
     * @member {string} name
     * @memberof c2sLogin
     * @instance
     */
    c2sLogin.prototype.name = "";

    /**
     * c2sLogin sex.
     * @member {string} sex
     * @memberof c2sLogin
     * @instance
     */
    c2sLogin.prototype.sex = "";

    /**
     * c2sLogin userId.
     * @member {number} userId
     * @memberof c2sLogin
     * @instance
     */
    c2sLogin.prototype.userId = 0;

    /**
     * Creates a new c2sLogin instance using the specified properties.
     * @function create
     * @memberof c2sLogin
     * @static
     * @param {Ic2sLogin=} [properties] Properties to set
     * @returns {c2sLogin} c2sLogin instance
     */
    c2sLogin.create = function create(properties) {
        return new c2sLogin(properties);
    };

    /**
     * Encodes the specified c2sLogin message. Does not implicitly {@link c2sLogin.verify|verify} messages.
     * @function encode
     * @memberof c2sLogin
     * @static
     * @param {Ic2sLogin} message c2sLogin message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sLogin.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 2 =*/10).string(message.account);
        writer.uint32(/* id 2, wireType 2 =*/18).string(message.sign);
        writer.uint32(/* id 3, wireType 2 =*/26).string(message.headimg);
        writer.uint32(/* id 4, wireType 2 =*/34).string(message.name);
        writer.uint32(/* id 5, wireType 2 =*/42).string(message.sex);
        writer.uint32(/* id 6, wireType 0 =*/48).int32(message.userId);
        return writer;
    };

    /**
     * Encodes the specified c2sLogin message, length delimited. Does not implicitly {@link c2sLogin.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sLogin
     * @static
     * @param {Ic2sLogin} message c2sLogin message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sLogin.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sLogin message from the specified reader or buffer.
     * @function decode
     * @memberof c2sLogin
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sLogin} c2sLogin
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sLogin.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sLogin();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.account = reader.string();
                break;
            case 2:
                message.sign = reader.string();
                break;
            case 3:
                message.headimg = reader.string();
                break;
            case 4:
                message.name = reader.string();
                break;
            case 5:
                message.sex = reader.string();
                break;
            case 6:
                message.userId = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("account"))
            throw $util.ProtocolError("missing required 'account'", { instance: message });
        if (!message.hasOwnProperty("sign"))
            throw $util.ProtocolError("missing required 'sign'", { instance: message });
        if (!message.hasOwnProperty("headimg"))
            throw $util.ProtocolError("missing required 'headimg'", { instance: message });
        if (!message.hasOwnProperty("name"))
            throw $util.ProtocolError("missing required 'name'", { instance: message });
        if (!message.hasOwnProperty("sex"))
            throw $util.ProtocolError("missing required 'sex'", { instance: message });
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sLogin message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sLogin
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sLogin} c2sLogin
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sLogin.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sLogin message.
     * @function verify
     * @memberof c2sLogin
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sLogin.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isString(message.account))
            return "account: string expected";
        if (!$util.isString(message.sign))
            return "sign: string expected";
        if (!$util.isString(message.headimg))
            return "headimg: string expected";
        if (!$util.isString(message.name))
            return "name: string expected";
        if (!$util.isString(message.sex))
            return "sex: string expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        return null;
    };

    /**
     * Creates a c2sLogin message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sLogin
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sLogin} c2sLogin
     */
    c2sLogin.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sLogin)
            return object;
        var message = new $root.c2sLogin();
        if (object.account != null)
            message.account = String(object.account);
        if (object.sign != null)
            message.sign = String(object.sign);
        if (object.headimg != null)
            message.headimg = String(object.headimg);
        if (object.name != null)
            message.name = String(object.name);
        if (object.sex != null)
            message.sex = String(object.sex);
        if (object.userId != null)
            message.userId = object.userId | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sLogin message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sLogin
     * @static
     * @param {c2sLogin} message c2sLogin
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sLogin.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.account = "";
            object.sign = "";
            object.headimg = "";
            object.name = "";
            object.sex = "";
            object.userId = 0;
        }
        if (message.account != null && message.hasOwnProperty("account"))
            object.account = message.account;
        if (message.sign != null && message.hasOwnProperty("sign"))
            object.sign = message.sign;
        if (message.headimg != null && message.hasOwnProperty("headimg"))
            object.headimg = message.headimg;
        if (message.name != null && message.hasOwnProperty("name"))
            object.name = message.name;
        if (message.sex != null && message.hasOwnProperty("sex"))
            object.sex = message.sex;
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        return object;
    };

    /**
     * Converts this c2sLogin to JSON.
     * @function toJSON
     * @memberof c2sLogin
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sLogin.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sLogin;
})();

$root.s2cLogin = (function() {

    /**
     * Properties of a s2cLogin.
     * @exports Is2cLogin
     * @interface Is2cLogin
     * @property {number} userID s2cLogin userID
     * @property {number} errorCode s2cLogin errorCode
     * @property {Array.<Ienmeys>|null} [enmeysConfig] s2cLogin enmeysConfig
     */

    /**
     * Constructs a new s2cLogin.
     * @exports s2cLogin
     * @classdesc Represents a s2cLogin.
     * @implements Is2cLogin
     * @constructor
     * @param {Is2cLogin=} [properties] Properties to set
     */
    function s2cLogin(properties) {
        this.enmeysConfig = [];
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cLogin userID.
     * @member {number} userID
     * @memberof s2cLogin
     * @instance
     */
    s2cLogin.prototype.userID = 0;

    /**
     * s2cLogin errorCode.
     * @member {number} errorCode
     * @memberof s2cLogin
     * @instance
     */
    s2cLogin.prototype.errorCode = 0;

    /**
     * s2cLogin enmeysConfig.
     * @member {Array.<Ienmeys>} enmeysConfig
     * @memberof s2cLogin
     * @instance
     */
    s2cLogin.prototype.enmeysConfig = $util.emptyArray;

    /**
     * Creates a new s2cLogin instance using the specified properties.
     * @function create
     * @memberof s2cLogin
     * @static
     * @param {Is2cLogin=} [properties] Properties to set
     * @returns {s2cLogin} s2cLogin instance
     */
    s2cLogin.create = function create(properties) {
        return new s2cLogin(properties);
    };

    /**
     * Encodes the specified s2cLogin message. Does not implicitly {@link s2cLogin.verify|verify} messages.
     * @function encode
     * @memberof s2cLogin
     * @static
     * @param {Is2cLogin} message s2cLogin message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cLogin.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userID);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.errorCode);
        if (message.enmeysConfig != null && message.enmeysConfig.length)
            for (var i = 0; i < message.enmeysConfig.length; ++i)
                $root.enmeys.encode(message.enmeysConfig[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
        return writer;
    };

    /**
     * Encodes the specified s2cLogin message, length delimited. Does not implicitly {@link s2cLogin.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cLogin
     * @static
     * @param {Is2cLogin} message s2cLogin message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cLogin.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cLogin message from the specified reader or buffer.
     * @function decode
     * @memberof s2cLogin
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cLogin} s2cLogin
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cLogin.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cLogin();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userID = reader.int32();
                break;
            case 2:
                message.errorCode = reader.int32();
                break;
            case 3:
                if (!(message.enmeysConfig && message.enmeysConfig.length))
                    message.enmeysConfig = [];
                message.enmeysConfig.push($root.enmeys.decode(reader, reader.uint32()));
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userID"))
            throw $util.ProtocolError("missing required 'userID'", { instance: message });
        if (!message.hasOwnProperty("errorCode"))
            throw $util.ProtocolError("missing required 'errorCode'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cLogin message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cLogin
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cLogin} s2cLogin
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cLogin.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cLogin message.
     * @function verify
     * @memberof s2cLogin
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cLogin.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userID))
            return "userID: integer expected";
        if (!$util.isInteger(message.errorCode))
            return "errorCode: integer expected";
        if (message.enmeysConfig != null && message.hasOwnProperty("enmeysConfig")) {
            if (!Array.isArray(message.enmeysConfig))
                return "enmeysConfig: array expected";
            for (var i = 0; i < message.enmeysConfig.length; ++i) {
                var error = $root.enmeys.verify(message.enmeysConfig[i]);
                if (error)
                    return "enmeysConfig." + error;
            }
        }
        return null;
    };

    /**
     * Creates a s2cLogin message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cLogin
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cLogin} s2cLogin
     */
    s2cLogin.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cLogin)
            return object;
        var message = new $root.s2cLogin();
        if (object.userID != null)
            message.userID = object.userID | 0;
        if (object.errorCode != null)
            message.errorCode = object.errorCode | 0;
        if (object.enmeysConfig) {
            if (!Array.isArray(object.enmeysConfig))
                throw TypeError(".s2cLogin.enmeysConfig: array expected");
            message.enmeysConfig = [];
            for (var i = 0; i < object.enmeysConfig.length; ++i) {
                if (typeof object.enmeysConfig[i] !== "object")
                    throw TypeError(".s2cLogin.enmeysConfig: object expected");
                message.enmeysConfig[i] = $root.enmeys.fromObject(object.enmeysConfig[i]);
            }
        }
        return message;
    };

    /**
     * Creates a plain object from a s2cLogin message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cLogin
     * @static
     * @param {s2cLogin} message s2cLogin
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cLogin.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.arrays || options.defaults)
            object.enmeysConfig = [];
        if (options.defaults) {
            object.userID = 0;
            object.errorCode = 0;
        }
        if (message.userID != null && message.hasOwnProperty("userID"))
            object.userID = message.userID;
        if (message.errorCode != null && message.hasOwnProperty("errorCode"))
            object.errorCode = message.errorCode;
        if (message.enmeysConfig && message.enmeysConfig.length) {
            object.enmeysConfig = [];
            for (var j = 0; j < message.enmeysConfig.length; ++j)
                object.enmeysConfig[j] = $root.enmeys.toObject(message.enmeysConfig[j], options);
        }
        return object;
    };

    /**
     * Converts this s2cLogin to JSON.
     * @function toJSON
     * @memberof s2cLogin
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cLogin.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cLogin;
})();

$root.enmeys = (function() {

    /**
     * Properties of an enmeys.
     * @exports Ienmeys
     * @interface Ienmeys
     * @property {number} type enmeys type
     * @property {number} hp enmeys hp
     * @property {number} price enmeys price
     * @property {number} speed enmeys speed
     * @property {number} getGold enmeys getGold
     * @property {number} cd enmeys cd
     */

    /**
     * Constructs a new enmeys.
     * @exports enmeys
     * @classdesc Represents an enmeys.
     * @implements Ienmeys
     * @constructor
     * @param {Ienmeys=} [properties] Properties to set
     */
    function enmeys(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * enmeys type.
     * @member {number} type
     * @memberof enmeys
     * @instance
     */
    enmeys.prototype.type = 0;

    /**
     * enmeys hp.
     * @member {number} hp
     * @memberof enmeys
     * @instance
     */
    enmeys.prototype.hp = 0;

    /**
     * enmeys price.
     * @member {number} price
     * @memberof enmeys
     * @instance
     */
    enmeys.prototype.price = 0;

    /**
     * enmeys speed.
     * @member {number} speed
     * @memberof enmeys
     * @instance
     */
    enmeys.prototype.speed = 0;

    /**
     * enmeys getGold.
     * @member {number} getGold
     * @memberof enmeys
     * @instance
     */
    enmeys.prototype.getGold = 0;

    /**
     * enmeys cd.
     * @member {number} cd
     * @memberof enmeys
     * @instance
     */
    enmeys.prototype.cd = 0;

    /**
     * Creates a new enmeys instance using the specified properties.
     * @function create
     * @memberof enmeys
     * @static
     * @param {Ienmeys=} [properties] Properties to set
     * @returns {enmeys} enmeys instance
     */
    enmeys.create = function create(properties) {
        return new enmeys(properties);
    };

    /**
     * Encodes the specified enmeys message. Does not implicitly {@link enmeys.verify|verify} messages.
     * @function encode
     * @memberof enmeys
     * @static
     * @param {Ienmeys} message enmeys message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    enmeys.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.hp);
        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.price);
        writer.uint32(/* id 4, wireType 0 =*/32).int32(message.speed);
        writer.uint32(/* id 5, wireType 0 =*/40).int32(message.getGold);
        writer.uint32(/* id 6, wireType 0 =*/48).int32(message.cd);
        return writer;
    };

    /**
     * Encodes the specified enmeys message, length delimited. Does not implicitly {@link enmeys.verify|verify} messages.
     * @function encodeDelimited
     * @memberof enmeys
     * @static
     * @param {Ienmeys} message enmeys message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    enmeys.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes an enmeys message from the specified reader or buffer.
     * @function decode
     * @memberof enmeys
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {enmeys} enmeys
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    enmeys.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.enmeys();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.type = reader.int32();
                break;
            case 2:
                message.hp = reader.int32();
                break;
            case 3:
                message.price = reader.int32();
                break;
            case 4:
                message.speed = reader.int32();
                break;
            case 5:
                message.getGold = reader.int32();
                break;
            case 6:
                message.cd = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("type"))
            throw $util.ProtocolError("missing required 'type'", { instance: message });
        if (!message.hasOwnProperty("hp"))
            throw $util.ProtocolError("missing required 'hp'", { instance: message });
        if (!message.hasOwnProperty("price"))
            throw $util.ProtocolError("missing required 'price'", { instance: message });
        if (!message.hasOwnProperty("speed"))
            throw $util.ProtocolError("missing required 'speed'", { instance: message });
        if (!message.hasOwnProperty("getGold"))
            throw $util.ProtocolError("missing required 'getGold'", { instance: message });
        if (!message.hasOwnProperty("cd"))
            throw $util.ProtocolError("missing required 'cd'", { instance: message });
        return message;
    };

    /**
     * Decodes an enmeys message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof enmeys
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {enmeys} enmeys
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    enmeys.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies an enmeys message.
     * @function verify
     * @memberof enmeys
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    enmeys.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.type))
            return "type: integer expected";
        if (!$util.isInteger(message.hp))
            return "hp: integer expected";
        if (!$util.isInteger(message.price))
            return "price: integer expected";
        if (!$util.isInteger(message.speed))
            return "speed: integer expected";
        if (!$util.isInteger(message.getGold))
            return "getGold: integer expected";
        if (!$util.isInteger(message.cd))
            return "cd: integer expected";
        return null;
    };

    /**
     * Creates an enmeys message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof enmeys
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {enmeys} enmeys
     */
    enmeys.fromObject = function fromObject(object) {
        if (object instanceof $root.enmeys)
            return object;
        var message = new $root.enmeys();
        if (object.type != null)
            message.type = object.type | 0;
        if (object.hp != null)
            message.hp = object.hp | 0;
        if (object.price != null)
            message.price = object.price | 0;
        if (object.speed != null)
            message.speed = object.speed | 0;
        if (object.getGold != null)
            message.getGold = object.getGold | 0;
        if (object.cd != null)
            message.cd = object.cd | 0;
        return message;
    };

    /**
     * Creates a plain object from an enmeys message. Also converts values to other types if specified.
     * @function toObject
     * @memberof enmeys
     * @static
     * @param {enmeys} message enmeys
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    enmeys.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.type = 0;
            object.hp = 0;
            object.price = 0;
            object.speed = 0;
            object.getGold = 0;
            object.cd = 0;
        }
        if (message.type != null && message.hasOwnProperty("type"))
            object.type = message.type;
        if (message.hp != null && message.hasOwnProperty("hp"))
            object.hp = message.hp;
        if (message.price != null && message.hasOwnProperty("price"))
            object.price = message.price;
        if (message.speed != null && message.hasOwnProperty("speed"))
            object.speed = message.speed;
        if (message.getGold != null && message.hasOwnProperty("getGold"))
            object.getGold = message.getGold;
        if (message.cd != null && message.hasOwnProperty("cd"))
            object.cd = message.cd;
        return object;
    };

    /**
     * Converts this enmeys to JSON.
     * @function toJSON
     * @memberof enmeys
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    enmeys.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return enmeys;
})();

$root.location = (function() {

    /**
     * Properties of a location.
     * @exports Ilocation
     * @interface Ilocation
     * @property {number} positionX location positionX
     * @property {number} positionY location positionY
     */

    /**
     * Constructs a new location.
     * @exports location
     * @classdesc Represents a location.
     * @implements Ilocation
     * @constructor
     * @param {Ilocation=} [properties] Properties to set
     */
    function location(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * location positionX.
     * @member {number} positionX
     * @memberof location
     * @instance
     */
    location.prototype.positionX = 0;

    /**
     * location positionY.
     * @member {number} positionY
     * @memberof location
     * @instance
     */
    location.prototype.positionY = 0;

    /**
     * Creates a new location instance using the specified properties.
     * @function create
     * @memberof location
     * @static
     * @param {Ilocation=} [properties] Properties to set
     * @returns {location} location instance
     */
    location.create = function create(properties) {
        return new location(properties);
    };

    /**
     * Encodes the specified location message. Does not implicitly {@link location.verify|verify} messages.
     * @function encode
     * @memberof location
     * @static
     * @param {Ilocation} message location message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    location.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.positionX);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.positionY);
        return writer;
    };

    /**
     * Encodes the specified location message, length delimited. Does not implicitly {@link location.verify|verify} messages.
     * @function encodeDelimited
     * @memberof location
     * @static
     * @param {Ilocation} message location message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    location.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a location message from the specified reader or buffer.
     * @function decode
     * @memberof location
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {location} location
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    location.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.location();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.positionX = reader.int32();
                break;
            case 2:
                message.positionY = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("positionX"))
            throw $util.ProtocolError("missing required 'positionX'", { instance: message });
        if (!message.hasOwnProperty("positionY"))
            throw $util.ProtocolError("missing required 'positionY'", { instance: message });
        return message;
    };

    /**
     * Decodes a location message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof location
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {location} location
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    location.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a location message.
     * @function verify
     * @memberof location
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    location.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.positionX))
            return "positionX: integer expected";
        if (!$util.isInteger(message.positionY))
            return "positionY: integer expected";
        return null;
    };

    /**
     * Creates a location message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof location
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {location} location
     */
    location.fromObject = function fromObject(object) {
        if (object instanceof $root.location)
            return object;
        var message = new $root.location();
        if (object.positionX != null)
            message.positionX = object.positionX | 0;
        if (object.positionY != null)
            message.positionY = object.positionY | 0;
        return message;
    };

    /**
     * Creates a plain object from a location message. Also converts values to other types if specified.
     * @function toObject
     * @memberof location
     * @static
     * @param {location} message location
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    location.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.positionX = 0;
            object.positionY = 0;
        }
        if (message.positionX != null && message.hasOwnProperty("positionX"))
            object.positionX = message.positionX;
        if (message.positionY != null && message.hasOwnProperty("positionY"))
            object.positionY = message.positionY;
        return object;
    };

    /**
     * Converts this location to JSON.
     * @function toJSON
     * @memberof location
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    location.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return location;
})();

$root.c2sReady = (function() {

    /**
     * Properties of a c2sReady.
     * @exports Ic2sReady
     * @interface Ic2sReady
     * @property {number} userID c2sReady userID
     */

    /**
     * Constructs a new c2sReady.
     * @exports c2sReady
     * @classdesc Represents a c2sReady.
     * @implements Ic2sReady
     * @constructor
     * @param {Ic2sReady=} [properties] Properties to set
     */
    function c2sReady(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sReady userID.
     * @member {number} userID
     * @memberof c2sReady
     * @instance
     */
    c2sReady.prototype.userID = 0;

    /**
     * Creates a new c2sReady instance using the specified properties.
     * @function create
     * @memberof c2sReady
     * @static
     * @param {Ic2sReady=} [properties] Properties to set
     * @returns {c2sReady} c2sReady instance
     */
    c2sReady.create = function create(properties) {
        return new c2sReady(properties);
    };

    /**
     * Encodes the specified c2sReady message. Does not implicitly {@link c2sReady.verify|verify} messages.
     * @function encode
     * @memberof c2sReady
     * @static
     * @param {Ic2sReady} message c2sReady message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sReady.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userID);
        return writer;
    };

    /**
     * Encodes the specified c2sReady message, length delimited. Does not implicitly {@link c2sReady.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sReady
     * @static
     * @param {Ic2sReady} message c2sReady message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sReady.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sReady message from the specified reader or buffer.
     * @function decode
     * @memberof c2sReady
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sReady} c2sReady
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sReady.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sReady();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userID = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userID"))
            throw $util.ProtocolError("missing required 'userID'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sReady message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sReady
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sReady} c2sReady
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sReady.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sReady message.
     * @function verify
     * @memberof c2sReady
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sReady.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userID))
            return "userID: integer expected";
        return null;
    };

    /**
     * Creates a c2sReady message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sReady
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sReady} c2sReady
     */
    c2sReady.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sReady)
            return object;
        var message = new $root.c2sReady();
        if (object.userID != null)
            message.userID = object.userID | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sReady message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sReady
     * @static
     * @param {c2sReady} message c2sReady
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sReady.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults)
            object.userID = 0;
        if (message.userID != null && message.hasOwnProperty("userID"))
            object.userID = message.userID;
        return object;
    };

    /**
     * Converts this c2sReady to JSON.
     * @function toJSON
     * @memberof c2sReady
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sReady.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sReady;
})();

$root.s2cReady = (function() {

    /**
     * Properties of a s2cReady.
     * @exports Is2cReady
     * @interface Is2cReady
     * @property {number} errorCode s2cReady errorCode
     * @property {number} userID s2cReady userID
     */

    /**
     * Constructs a new s2cReady.
     * @exports s2cReady
     * @classdesc Represents a s2cReady.
     * @implements Is2cReady
     * @constructor
     * @param {Is2cReady=} [properties] Properties to set
     */
    function s2cReady(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cReady errorCode.
     * @member {number} errorCode
     * @memberof s2cReady
     * @instance
     */
    s2cReady.prototype.errorCode = 0;

    /**
     * s2cReady userID.
     * @member {number} userID
     * @memberof s2cReady
     * @instance
     */
    s2cReady.prototype.userID = 0;

    /**
     * Creates a new s2cReady instance using the specified properties.
     * @function create
     * @memberof s2cReady
     * @static
     * @param {Is2cReady=} [properties] Properties to set
     * @returns {s2cReady} s2cReady instance
     */
    s2cReady.create = function create(properties) {
        return new s2cReady(properties);
    };

    /**
     * Encodes the specified s2cReady message. Does not implicitly {@link s2cReady.verify|verify} messages.
     * @function encode
     * @memberof s2cReady
     * @static
     * @param {Is2cReady} message s2cReady message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cReady.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.errorCode);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.userID);
        return writer;
    };

    /**
     * Encodes the specified s2cReady message, length delimited. Does not implicitly {@link s2cReady.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cReady
     * @static
     * @param {Is2cReady} message s2cReady message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cReady.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cReady message from the specified reader or buffer.
     * @function decode
     * @memberof s2cReady
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cReady} s2cReady
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cReady.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cReady();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.errorCode = reader.int32();
                break;
            case 2:
                message.userID = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("errorCode"))
            throw $util.ProtocolError("missing required 'errorCode'", { instance: message });
        if (!message.hasOwnProperty("userID"))
            throw $util.ProtocolError("missing required 'userID'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cReady message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cReady
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cReady} s2cReady
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cReady.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cReady message.
     * @function verify
     * @memberof s2cReady
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cReady.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.errorCode))
            return "errorCode: integer expected";
        if (!$util.isInteger(message.userID))
            return "userID: integer expected";
        return null;
    };

    /**
     * Creates a s2cReady message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cReady
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cReady} s2cReady
     */
    s2cReady.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cReady)
            return object;
        var message = new $root.s2cReady();
        if (object.errorCode != null)
            message.errorCode = object.errorCode | 0;
        if (object.userID != null)
            message.userID = object.userID | 0;
        return message;
    };

    /**
     * Creates a plain object from a s2cReady message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cReady
     * @static
     * @param {s2cReady} message s2cReady
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cReady.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.errorCode = 0;
            object.userID = 0;
        }
        if (message.errorCode != null && message.hasOwnProperty("errorCode"))
            object.errorCode = message.errorCode;
        if (message.userID != null && message.hasOwnProperty("userID"))
            object.userID = message.userID;
        return object;
    };

    /**
     * Converts this s2cReady to JSON.
     * @function toJSON
     * @memberof s2cReady
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cReady.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cReady;
})();

$root.s2cGameStart = (function() {

    /**
     * Properties of a s2cGameStart.
     * @exports Is2cGameStart
     * @interface Is2cGameStart
     * @property {number} errorCode s2cGameStart errorCode
     * @property {string|null} [headimg] s2cGameStart headimg
     * @property {string|null} [name] s2cGameStart name
     * @property {string|null} [sex] s2cGameStart sex
     */

    /**
     * Constructs a new s2cGameStart.
     * @exports s2cGameStart
     * @classdesc Represents a s2cGameStart.
     * @implements Is2cGameStart
     * @constructor
     * @param {Is2cGameStart=} [properties] Properties to set
     */
    function s2cGameStart(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cGameStart errorCode.
     * @member {number} errorCode
     * @memberof s2cGameStart
     * @instance
     */
    s2cGameStart.prototype.errorCode = 0;

    /**
     * s2cGameStart headimg.
     * @member {string} headimg
     * @memberof s2cGameStart
     * @instance
     */
    s2cGameStart.prototype.headimg = "";

    /**
     * s2cGameStart name.
     * @member {string} name
     * @memberof s2cGameStart
     * @instance
     */
    s2cGameStart.prototype.name = "";

    /**
     * s2cGameStart sex.
     * @member {string} sex
     * @memberof s2cGameStart
     * @instance
     */
    s2cGameStart.prototype.sex = "";

    /**
     * Creates a new s2cGameStart instance using the specified properties.
     * @function create
     * @memberof s2cGameStart
     * @static
     * @param {Is2cGameStart=} [properties] Properties to set
     * @returns {s2cGameStart} s2cGameStart instance
     */
    s2cGameStart.create = function create(properties) {
        return new s2cGameStart(properties);
    };

    /**
     * Encodes the specified s2cGameStart message. Does not implicitly {@link s2cGameStart.verify|verify} messages.
     * @function encode
     * @memberof s2cGameStart
     * @static
     * @param {Is2cGameStart} message s2cGameStart message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cGameStart.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.errorCode);
        if (message.headimg != null && message.hasOwnProperty("headimg"))
            writer.uint32(/* id 2, wireType 2 =*/18).string(message.headimg);
        if (message.name != null && message.hasOwnProperty("name"))
            writer.uint32(/* id 3, wireType 2 =*/26).string(message.name);
        if (message.sex != null && message.hasOwnProperty("sex"))
            writer.uint32(/* id 4, wireType 2 =*/34).string(message.sex);
        return writer;
    };

    /**
     * Encodes the specified s2cGameStart message, length delimited. Does not implicitly {@link s2cGameStart.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cGameStart
     * @static
     * @param {Is2cGameStart} message s2cGameStart message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cGameStart.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cGameStart message from the specified reader or buffer.
     * @function decode
     * @memberof s2cGameStart
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cGameStart} s2cGameStart
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cGameStart.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cGameStart();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.errorCode = reader.int32();
                break;
            case 2:
                message.headimg = reader.string();
                break;
            case 3:
                message.name = reader.string();
                break;
            case 4:
                message.sex = reader.string();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("errorCode"))
            throw $util.ProtocolError("missing required 'errorCode'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cGameStart message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cGameStart
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cGameStart} s2cGameStart
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cGameStart.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cGameStart message.
     * @function verify
     * @memberof s2cGameStart
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cGameStart.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.errorCode))
            return "errorCode: integer expected";
        if (message.headimg != null && message.hasOwnProperty("headimg"))
            if (!$util.isString(message.headimg))
                return "headimg: string expected";
        if (message.name != null && message.hasOwnProperty("name"))
            if (!$util.isString(message.name))
                return "name: string expected";
        if (message.sex != null && message.hasOwnProperty("sex"))
            if (!$util.isString(message.sex))
                return "sex: string expected";
        return null;
    };

    /**
     * Creates a s2cGameStart message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cGameStart
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cGameStart} s2cGameStart
     */
    s2cGameStart.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cGameStart)
            return object;
        var message = new $root.s2cGameStart();
        if (object.errorCode != null)
            message.errorCode = object.errorCode | 0;
        if (object.headimg != null)
            message.headimg = String(object.headimg);
        if (object.name != null)
            message.name = String(object.name);
        if (object.sex != null)
            message.sex = String(object.sex);
        return message;
    };

    /**
     * Creates a plain object from a s2cGameStart message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cGameStart
     * @static
     * @param {s2cGameStart} message s2cGameStart
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cGameStart.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.errorCode = 0;
            object.headimg = "";
            object.name = "";
            object.sex = "";
        }
        if (message.errorCode != null && message.hasOwnProperty("errorCode"))
            object.errorCode = message.errorCode;
        if (message.headimg != null && message.hasOwnProperty("headimg"))
            object.headimg = message.headimg;
        if (message.name != null && message.hasOwnProperty("name"))
            object.name = message.name;
        if (message.sex != null && message.hasOwnProperty("sex"))
            object.sex = message.sex;
        return object;
    };

    /**
     * Converts this s2cGameStart to JSON.
     * @function toJSON
     * @memberof s2cGameStart
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cGameStart.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cGameStart;
})();

$root.s2cRoundEnd = (function() {

    /**
     * Properties of a s2cRoundEnd.
     * @exports Is2cRoundEnd
     * @interface Is2cRoundEnd
     * @property {number} errorCode s2cRoundEnd errorCode
     * @property {number} Roundnumber s2cRoundEnd Roundnumber
     */

    /**
     * Constructs a new s2cRoundEnd.
     * @exports s2cRoundEnd
     * @classdesc Represents a s2cRoundEnd.
     * @implements Is2cRoundEnd
     * @constructor
     * @param {Is2cRoundEnd=} [properties] Properties to set
     */
    function s2cRoundEnd(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cRoundEnd errorCode.
     * @member {number} errorCode
     * @memberof s2cRoundEnd
     * @instance
     */
    s2cRoundEnd.prototype.errorCode = 0;

    /**
     * s2cRoundEnd Roundnumber.
     * @member {number} Roundnumber
     * @memberof s2cRoundEnd
     * @instance
     */
    s2cRoundEnd.prototype.Roundnumber = 0;

    /**
     * Creates a new s2cRoundEnd instance using the specified properties.
     * @function create
     * @memberof s2cRoundEnd
     * @static
     * @param {Is2cRoundEnd=} [properties] Properties to set
     * @returns {s2cRoundEnd} s2cRoundEnd instance
     */
    s2cRoundEnd.create = function create(properties) {
        return new s2cRoundEnd(properties);
    };

    /**
     * Encodes the specified s2cRoundEnd message. Does not implicitly {@link s2cRoundEnd.verify|verify} messages.
     * @function encode
     * @memberof s2cRoundEnd
     * @static
     * @param {Is2cRoundEnd} message s2cRoundEnd message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cRoundEnd.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.errorCode);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Roundnumber);
        return writer;
    };

    /**
     * Encodes the specified s2cRoundEnd message, length delimited. Does not implicitly {@link s2cRoundEnd.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cRoundEnd
     * @static
     * @param {Is2cRoundEnd} message s2cRoundEnd message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cRoundEnd.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cRoundEnd message from the specified reader or buffer.
     * @function decode
     * @memberof s2cRoundEnd
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cRoundEnd} s2cRoundEnd
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cRoundEnd.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cRoundEnd();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.errorCode = reader.int32();
                break;
            case 2:
                message.Roundnumber = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("errorCode"))
            throw $util.ProtocolError("missing required 'errorCode'", { instance: message });
        if (!message.hasOwnProperty("Roundnumber"))
            throw $util.ProtocolError("missing required 'Roundnumber'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cRoundEnd message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cRoundEnd
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cRoundEnd} s2cRoundEnd
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cRoundEnd.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cRoundEnd message.
     * @function verify
     * @memberof s2cRoundEnd
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cRoundEnd.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.errorCode))
            return "errorCode: integer expected";
        if (!$util.isInteger(message.Roundnumber))
            return "Roundnumber: integer expected";
        return null;
    };

    /**
     * Creates a s2cRoundEnd message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cRoundEnd
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cRoundEnd} s2cRoundEnd
     */
    s2cRoundEnd.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cRoundEnd)
            return object;
        var message = new $root.s2cRoundEnd();
        if (object.errorCode != null)
            message.errorCode = object.errorCode | 0;
        if (object.Roundnumber != null)
            message.Roundnumber = object.Roundnumber | 0;
        return message;
    };

    /**
     * Creates a plain object from a s2cRoundEnd message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cRoundEnd
     * @static
     * @param {s2cRoundEnd} message s2cRoundEnd
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cRoundEnd.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.errorCode = 0;
            object.Roundnumber = 0;
        }
        if (message.errorCode != null && message.hasOwnProperty("errorCode"))
            object.errorCode = message.errorCode;
        if (message.Roundnumber != null && message.hasOwnProperty("Roundnumber"))
            object.Roundnumber = message.Roundnumber;
        return object;
    };

    /**
     * Converts this s2cRoundEnd to JSON.
     * @function toJSON
     * @memberof s2cRoundEnd
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cRoundEnd.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cRoundEnd;
})();

$root.c2sSendEnemy = (function() {

    /**
     * Properties of a c2sSendEnemy.
     * @exports Ic2sSendEnemy
     * @interface Ic2sSendEnemy
     * @property {Array.<number>|null} [enmeys] c2sSendEnemy enmeys
     * @property {number} userId c2sSendEnemy userId
     * @property {number} Roundnumber c2sSendEnemy Roundnumber
     * @property {number} gold c2sSendEnemy gold
     */

    /**
     * Constructs a new c2sSendEnemy.
     * @exports c2sSendEnemy
     * @classdesc Represents a c2sSendEnemy.
     * @implements Ic2sSendEnemy
     * @constructor
     * @param {Ic2sSendEnemy=} [properties] Properties to set
     */
    function c2sSendEnemy(properties) {
        this.enmeys = [];
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sSendEnemy enmeys.
     * @member {Array.<number>} enmeys
     * @memberof c2sSendEnemy
     * @instance
     */
    c2sSendEnemy.prototype.enmeys = $util.emptyArray;

    /**
     * c2sSendEnemy userId.
     * @member {number} userId
     * @memberof c2sSendEnemy
     * @instance
     */
    c2sSendEnemy.prototype.userId = 0;

    /**
     * c2sSendEnemy Roundnumber.
     * @member {number} Roundnumber
     * @memberof c2sSendEnemy
     * @instance
     */
    c2sSendEnemy.prototype.Roundnumber = 0;

    /**
     * c2sSendEnemy gold.
     * @member {number} gold
     * @memberof c2sSendEnemy
     * @instance
     */
    c2sSendEnemy.prototype.gold = 0;

    /**
     * Creates a new c2sSendEnemy instance using the specified properties.
     * @function create
     * @memberof c2sSendEnemy
     * @static
     * @param {Ic2sSendEnemy=} [properties] Properties to set
     * @returns {c2sSendEnemy} c2sSendEnemy instance
     */
    c2sSendEnemy.create = function create(properties) {
        return new c2sSendEnemy(properties);
    };

    /**
     * Encodes the specified c2sSendEnemy message. Does not implicitly {@link c2sSendEnemy.verify|verify} messages.
     * @function encode
     * @memberof c2sSendEnemy
     * @static
     * @param {Ic2sSendEnemy} message c2sSendEnemy message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sSendEnemy.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        if (message.enmeys != null && message.enmeys.length) {
            writer.uint32(/* id 1, wireType 2 =*/10).fork();
            for (var i = 0; i < message.enmeys.length; ++i)
                writer.int32(message.enmeys[i]);
            writer.ldelim();
        }
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.userId);
        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Roundnumber);
        writer.uint32(/* id 4, wireType 0 =*/32).int32(message.gold);
        return writer;
    };

    /**
     * Encodes the specified c2sSendEnemy message, length delimited. Does not implicitly {@link c2sSendEnemy.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sSendEnemy
     * @static
     * @param {Ic2sSendEnemy} message c2sSendEnemy message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sSendEnemy.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sSendEnemy message from the specified reader or buffer.
     * @function decode
     * @memberof c2sSendEnemy
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sSendEnemy} c2sSendEnemy
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sSendEnemy.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sSendEnemy();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                if (!(message.enmeys && message.enmeys.length))
                    message.enmeys = [];
                if ((tag & 7) === 2) {
                    var end2 = reader.uint32() + reader.pos;
                    while (reader.pos < end2)
                        message.enmeys.push(reader.int32());
                } else
                    message.enmeys.push(reader.int32());
                break;
            case 2:
                message.userId = reader.int32();
                break;
            case 3:
                message.Roundnumber = reader.int32();
                break;
            case 4:
                message.gold = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        if (!message.hasOwnProperty("Roundnumber"))
            throw $util.ProtocolError("missing required 'Roundnumber'", { instance: message });
        if (!message.hasOwnProperty("gold"))
            throw $util.ProtocolError("missing required 'gold'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sSendEnemy message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sSendEnemy
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sSendEnemy} c2sSendEnemy
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sSendEnemy.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sSendEnemy message.
     * @function verify
     * @memberof c2sSendEnemy
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sSendEnemy.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (message.enmeys != null && message.hasOwnProperty("enmeys")) {
            if (!Array.isArray(message.enmeys))
                return "enmeys: array expected";
            for (var i = 0; i < message.enmeys.length; ++i)
                if (!$util.isInteger(message.enmeys[i]))
                    return "enmeys: integer[] expected";
        }
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        if (!$util.isInteger(message.Roundnumber))
            return "Roundnumber: integer expected";
        if (!$util.isInteger(message.gold))
            return "gold: integer expected";
        return null;
    };

    /**
     * Creates a c2sSendEnemy message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sSendEnemy
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sSendEnemy} c2sSendEnemy
     */
    c2sSendEnemy.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sSendEnemy)
            return object;
        var message = new $root.c2sSendEnemy();
        if (object.enmeys) {
            if (!Array.isArray(object.enmeys))
                throw TypeError(".c2sSendEnemy.enmeys: array expected");
            message.enmeys = [];
            for (var i = 0; i < object.enmeys.length; ++i)
                message.enmeys[i] = object.enmeys[i] | 0;
        }
        if (object.userId != null)
            message.userId = object.userId | 0;
        if (object.Roundnumber != null)
            message.Roundnumber = object.Roundnumber | 0;
        if (object.gold != null)
            message.gold = object.gold | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sSendEnemy message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sSendEnemy
     * @static
     * @param {c2sSendEnemy} message c2sSendEnemy
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sSendEnemy.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.arrays || options.defaults)
            object.enmeys = [];
        if (options.defaults) {
            object.userId = 0;
            object.Roundnumber = 0;
            object.gold = 0;
        }
        if (message.enmeys && message.enmeys.length) {
            object.enmeys = [];
            for (var j = 0; j < message.enmeys.length; ++j)
                object.enmeys[j] = message.enmeys[j];
        }
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        if (message.Roundnumber != null && message.hasOwnProperty("Roundnumber"))
            object.Roundnumber = message.Roundnumber;
        if (message.gold != null && message.hasOwnProperty("gold"))
            object.gold = message.gold;
        return object;
    };

    /**
     * Converts this c2sSendEnemy to JSON.
     * @function toJSON
     * @memberof c2sSendEnemy
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sSendEnemy.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sSendEnemy;
})();

$root.s2cSendEnemy = (function() {

    /**
     * Properties of a s2cSendEnemy.
     * @exports Is2cSendEnemy
     * @interface Is2cSendEnemy
     * @property {Array.<number>|null} [enmeys] s2cSendEnemy enmeys
     * @property {Array.<Ilocation>|null} [enmeysPosition] s2cSendEnemy enmeysPosition
     */

    /**
     * Constructs a new s2cSendEnemy.
     * @exports s2cSendEnemy
     * @classdesc Represents a s2cSendEnemy.
     * @implements Is2cSendEnemy
     * @constructor
     * @param {Is2cSendEnemy=} [properties] Properties to set
     */
    function s2cSendEnemy(properties) {
        this.enmeys = [];
        this.enmeysPosition = [];
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cSendEnemy enmeys.
     * @member {Array.<number>} enmeys
     * @memberof s2cSendEnemy
     * @instance
     */
    s2cSendEnemy.prototype.enmeys = $util.emptyArray;

    /**
     * s2cSendEnemy enmeysPosition.
     * @member {Array.<Ilocation>} enmeysPosition
     * @memberof s2cSendEnemy
     * @instance
     */
    s2cSendEnemy.prototype.enmeysPosition = $util.emptyArray;

    /**
     * Creates a new s2cSendEnemy instance using the specified properties.
     * @function create
     * @memberof s2cSendEnemy
     * @static
     * @param {Is2cSendEnemy=} [properties] Properties to set
     * @returns {s2cSendEnemy} s2cSendEnemy instance
     */
    s2cSendEnemy.create = function create(properties) {
        return new s2cSendEnemy(properties);
    };

    /**
     * Encodes the specified s2cSendEnemy message. Does not implicitly {@link s2cSendEnemy.verify|verify} messages.
     * @function encode
     * @memberof s2cSendEnemy
     * @static
     * @param {Is2cSendEnemy} message s2cSendEnemy message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cSendEnemy.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        if (message.enmeys != null && message.enmeys.length) {
            writer.uint32(/* id 1, wireType 2 =*/10).fork();
            for (var i = 0; i < message.enmeys.length; ++i)
                writer.int32(message.enmeys[i]);
            writer.ldelim();
        }
        if (message.enmeysPosition != null && message.enmeysPosition.length)
            for (var i = 0; i < message.enmeysPosition.length; ++i)
                $root.location.encode(message.enmeysPosition[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
        return writer;
    };

    /**
     * Encodes the specified s2cSendEnemy message, length delimited. Does not implicitly {@link s2cSendEnemy.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cSendEnemy
     * @static
     * @param {Is2cSendEnemy} message s2cSendEnemy message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cSendEnemy.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cSendEnemy message from the specified reader or buffer.
     * @function decode
     * @memberof s2cSendEnemy
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cSendEnemy} s2cSendEnemy
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cSendEnemy.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cSendEnemy();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                if (!(message.enmeys && message.enmeys.length))
                    message.enmeys = [];
                if ((tag & 7) === 2) {
                    var end2 = reader.uint32() + reader.pos;
                    while (reader.pos < end2)
                        message.enmeys.push(reader.int32());
                } else
                    message.enmeys.push(reader.int32());
                break;
            case 2:
                if (!(message.enmeysPosition && message.enmeysPosition.length))
                    message.enmeysPosition = [];
                message.enmeysPosition.push($root.location.decode(reader, reader.uint32()));
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        return message;
    };

    /**
     * Decodes a s2cSendEnemy message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cSendEnemy
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cSendEnemy} s2cSendEnemy
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cSendEnemy.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cSendEnemy message.
     * @function verify
     * @memberof s2cSendEnemy
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cSendEnemy.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (message.enmeys != null && message.hasOwnProperty("enmeys")) {
            if (!Array.isArray(message.enmeys))
                return "enmeys: array expected";
            for (var i = 0; i < message.enmeys.length; ++i)
                if (!$util.isInteger(message.enmeys[i]))
                    return "enmeys: integer[] expected";
        }
        if (message.enmeysPosition != null && message.hasOwnProperty("enmeysPosition")) {
            if (!Array.isArray(message.enmeysPosition))
                return "enmeysPosition: array expected";
            for (var i = 0; i < message.enmeysPosition.length; ++i) {
                var error = $root.location.verify(message.enmeysPosition[i]);
                if (error)
                    return "enmeysPosition." + error;
            }
        }
        return null;
    };

    /**
     * Creates a s2cSendEnemy message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cSendEnemy
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cSendEnemy} s2cSendEnemy
     */
    s2cSendEnemy.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cSendEnemy)
            return object;
        var message = new $root.s2cSendEnemy();
        if (object.enmeys) {
            if (!Array.isArray(object.enmeys))
                throw TypeError(".s2cSendEnemy.enmeys: array expected");
            message.enmeys = [];
            for (var i = 0; i < object.enmeys.length; ++i)
                message.enmeys[i] = object.enmeys[i] | 0;
        }
        if (object.enmeysPosition) {
            if (!Array.isArray(object.enmeysPosition))
                throw TypeError(".s2cSendEnemy.enmeysPosition: array expected");
            message.enmeysPosition = [];
            for (var i = 0; i < object.enmeysPosition.length; ++i) {
                if (typeof object.enmeysPosition[i] !== "object")
                    throw TypeError(".s2cSendEnemy.enmeysPosition: object expected");
                message.enmeysPosition[i] = $root.location.fromObject(object.enmeysPosition[i]);
            }
        }
        return message;
    };

    /**
     * Creates a plain object from a s2cSendEnemy message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cSendEnemy
     * @static
     * @param {s2cSendEnemy} message s2cSendEnemy
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cSendEnemy.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.arrays || options.defaults) {
            object.enmeys = [];
            object.enmeysPosition = [];
        }
        if (message.enmeys && message.enmeys.length) {
            object.enmeys = [];
            for (var j = 0; j < message.enmeys.length; ++j)
                object.enmeys[j] = message.enmeys[j];
        }
        if (message.enmeysPosition && message.enmeysPosition.length) {
            object.enmeysPosition = [];
            for (var j = 0; j < message.enmeysPosition.length; ++j)
                object.enmeysPosition[j] = $root.location.toObject(message.enmeysPosition[j], options);
        }
        return object;
    };

    /**
     * Converts this s2cSendEnemy to JSON.
     * @function toJSON
     * @memberof s2cSendEnemy
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cSendEnemy.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cSendEnemy;
})();

$root.c2sGameover = (function() {

    /**
     * Properties of a c2sGameover.
     * @exports Ic2sGameover
     * @interface Ic2sGameover
     * @property {number} userId c2sGameover userId
     */

    /**
     * Constructs a new c2sGameover.
     * @exports c2sGameover
     * @classdesc Represents a c2sGameover.
     * @implements Ic2sGameover
     * @constructor
     * @param {Ic2sGameover=} [properties] Properties to set
     */
    function c2sGameover(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sGameover userId.
     * @member {number} userId
     * @memberof c2sGameover
     * @instance
     */
    c2sGameover.prototype.userId = 0;

    /**
     * Creates a new c2sGameover instance using the specified properties.
     * @function create
     * @memberof c2sGameover
     * @static
     * @param {Ic2sGameover=} [properties] Properties to set
     * @returns {c2sGameover} c2sGameover instance
     */
    c2sGameover.create = function create(properties) {
        return new c2sGameover(properties);
    };

    /**
     * Encodes the specified c2sGameover message. Does not implicitly {@link c2sGameover.verify|verify} messages.
     * @function encode
     * @memberof c2sGameover
     * @static
     * @param {Ic2sGameover} message c2sGameover message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sGameover.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userId);
        return writer;
    };

    /**
     * Encodes the specified c2sGameover message, length delimited. Does not implicitly {@link c2sGameover.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sGameover
     * @static
     * @param {Ic2sGameover} message c2sGameover message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sGameover.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sGameover message from the specified reader or buffer.
     * @function decode
     * @memberof c2sGameover
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sGameover} c2sGameover
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sGameover.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sGameover();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userId = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sGameover message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sGameover
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sGameover} c2sGameover
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sGameover.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sGameover message.
     * @function verify
     * @memberof c2sGameover
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sGameover.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        return null;
    };

    /**
     * Creates a c2sGameover message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sGameover
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sGameover} c2sGameover
     */
    c2sGameover.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sGameover)
            return object;
        var message = new $root.c2sGameover();
        if (object.userId != null)
            message.userId = object.userId | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sGameover message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sGameover
     * @static
     * @param {c2sGameover} message c2sGameover
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sGameover.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults)
            object.userId = 0;
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        return object;
    };

    /**
     * Converts this c2sGameover to JSON.
     * @function toJSON
     * @memberof c2sGameover
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sGameover.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sGameover;
})();

$root.s2cGameover = (function() {

    /**
     * Properties of a s2cGameover.
     * @exports Is2cGameover
     * @interface Is2cGameover
     * @property {number} whoWin s2cGameover whoWin
     * @property {number} noLink s2cGameover noLink
     */

    /**
     * Constructs a new s2cGameover.
     * @exports s2cGameover
     * @classdesc Represents a s2cGameover.
     * @implements Is2cGameover
     * @constructor
     * @param {Is2cGameover=} [properties] Properties to set
     */
    function s2cGameover(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cGameover whoWin.
     * @member {number} whoWin
     * @memberof s2cGameover
     * @instance
     */
    s2cGameover.prototype.whoWin = 0;

    /**
     * s2cGameover noLink.
     * @member {number} noLink
     * @memberof s2cGameover
     * @instance
     */
    s2cGameover.prototype.noLink = 0;

    /**
     * Creates a new s2cGameover instance using the specified properties.
     * @function create
     * @memberof s2cGameover
     * @static
     * @param {Is2cGameover=} [properties] Properties to set
     * @returns {s2cGameover} s2cGameover instance
     */
    s2cGameover.create = function create(properties) {
        return new s2cGameover(properties);
    };

    /**
     * Encodes the specified s2cGameover message. Does not implicitly {@link s2cGameover.verify|verify} messages.
     * @function encode
     * @memberof s2cGameover
     * @static
     * @param {Is2cGameover} message s2cGameover message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cGameover.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.whoWin);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.noLink);
        return writer;
    };

    /**
     * Encodes the specified s2cGameover message, length delimited. Does not implicitly {@link s2cGameover.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cGameover
     * @static
     * @param {Is2cGameover} message s2cGameover message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cGameover.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cGameover message from the specified reader or buffer.
     * @function decode
     * @memberof s2cGameover
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cGameover} s2cGameover
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cGameover.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cGameover();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.whoWin = reader.int32();
                break;
            case 2:
                message.noLink = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("whoWin"))
            throw $util.ProtocolError("missing required 'whoWin'", { instance: message });
        if (!message.hasOwnProperty("noLink"))
            throw $util.ProtocolError("missing required 'noLink'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cGameover message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cGameover
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cGameover} s2cGameover
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cGameover.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cGameover message.
     * @function verify
     * @memberof s2cGameover
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cGameover.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.whoWin))
            return "whoWin: integer expected";
        if (!$util.isInteger(message.noLink))
            return "noLink: integer expected";
        return null;
    };

    /**
     * Creates a s2cGameover message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cGameover
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cGameover} s2cGameover
     */
    s2cGameover.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cGameover)
            return object;
        var message = new $root.s2cGameover();
        if (object.whoWin != null)
            message.whoWin = object.whoWin | 0;
        if (object.noLink != null)
            message.noLink = object.noLink | 0;
        return message;
    };

    /**
     * Creates a plain object from a s2cGameover message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cGameover
     * @static
     * @param {s2cGameover} message s2cGameover
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cGameover.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.whoWin = 0;
            object.noLink = 0;
        }
        if (message.whoWin != null && message.hasOwnProperty("whoWin"))
            object.whoWin = message.whoWin;
        if (message.noLink != null && message.hasOwnProperty("noLink"))
            object.noLink = message.noLink;
        return object;
    };

    /**
     * Converts this s2cGameover to JSON.
     * @function toJSON
     * @memberof s2cGameover
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cGameover.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cGameover;
})();

$root.c2sleakEnemy = (function() {

    /**
     * Properties of a c2sleakEnemy.
     * @exports Ic2sleakEnemy
     * @interface Ic2sleakEnemy
     * @property {number} userId c2sleakEnemy userId
     * @property {Array.<number>|null} [enmeys] c2sleakEnemy enmeys
     * @property {number} gold c2sleakEnemy gold
     */

    /**
     * Constructs a new c2sleakEnemy.
     * @exports c2sleakEnemy
     * @classdesc Represents a c2sleakEnemy.
     * @implements Ic2sleakEnemy
     * @constructor
     * @param {Ic2sleakEnemy=} [properties] Properties to set
     */
    function c2sleakEnemy(properties) {
        this.enmeys = [];
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sleakEnemy userId.
     * @member {number} userId
     * @memberof c2sleakEnemy
     * @instance
     */
    c2sleakEnemy.prototype.userId = 0;

    /**
     * c2sleakEnemy enmeys.
     * @member {Array.<number>} enmeys
     * @memberof c2sleakEnemy
     * @instance
     */
    c2sleakEnemy.prototype.enmeys = $util.emptyArray;

    /**
     * c2sleakEnemy gold.
     * @member {number} gold
     * @memberof c2sleakEnemy
     * @instance
     */
    c2sleakEnemy.prototype.gold = 0;

    /**
     * Creates a new c2sleakEnemy instance using the specified properties.
     * @function create
     * @memberof c2sleakEnemy
     * @static
     * @param {Ic2sleakEnemy=} [properties] Properties to set
     * @returns {c2sleakEnemy} c2sleakEnemy instance
     */
    c2sleakEnemy.create = function create(properties) {
        return new c2sleakEnemy(properties);
    };

    /**
     * Encodes the specified c2sleakEnemy message. Does not implicitly {@link c2sleakEnemy.verify|verify} messages.
     * @function encode
     * @memberof c2sleakEnemy
     * @static
     * @param {Ic2sleakEnemy} message c2sleakEnemy message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sleakEnemy.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userId);
        if (message.enmeys != null && message.enmeys.length) {
            writer.uint32(/* id 2, wireType 2 =*/18).fork();
            for (var i = 0; i < message.enmeys.length; ++i)
                writer.int32(message.enmeys[i]);
            writer.ldelim();
        }
        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.gold);
        return writer;
    };

    /**
     * Encodes the specified c2sleakEnemy message, length delimited. Does not implicitly {@link c2sleakEnemy.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sleakEnemy
     * @static
     * @param {Ic2sleakEnemy} message c2sleakEnemy message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sleakEnemy.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sleakEnemy message from the specified reader or buffer.
     * @function decode
     * @memberof c2sleakEnemy
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sleakEnemy} c2sleakEnemy
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sleakEnemy.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sleakEnemy();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userId = reader.int32();
                break;
            case 2:
                if (!(message.enmeys && message.enmeys.length))
                    message.enmeys = [];
                if ((tag & 7) === 2) {
                    var end2 = reader.uint32() + reader.pos;
                    while (reader.pos < end2)
                        message.enmeys.push(reader.int32());
                } else
                    message.enmeys.push(reader.int32());
                break;
            case 3:
                message.gold = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        if (!message.hasOwnProperty("gold"))
            throw $util.ProtocolError("missing required 'gold'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sleakEnemy message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sleakEnemy
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sleakEnemy} c2sleakEnemy
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sleakEnemy.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sleakEnemy message.
     * @function verify
     * @memberof c2sleakEnemy
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sleakEnemy.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        if (message.enmeys != null && message.hasOwnProperty("enmeys")) {
            if (!Array.isArray(message.enmeys))
                return "enmeys: array expected";
            for (var i = 0; i < message.enmeys.length; ++i)
                if (!$util.isInteger(message.enmeys[i]))
                    return "enmeys: integer[] expected";
        }
        if (!$util.isInteger(message.gold))
            return "gold: integer expected";
        return null;
    };

    /**
     * Creates a c2sleakEnemy message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sleakEnemy
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sleakEnemy} c2sleakEnemy
     */
    c2sleakEnemy.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sleakEnemy)
            return object;
        var message = new $root.c2sleakEnemy();
        if (object.userId != null)
            message.userId = object.userId | 0;
        if (object.enmeys) {
            if (!Array.isArray(object.enmeys))
                throw TypeError(".c2sleakEnemy.enmeys: array expected");
            message.enmeys = [];
            for (var i = 0; i < object.enmeys.length; ++i)
                message.enmeys[i] = object.enmeys[i] | 0;
        }
        if (object.gold != null)
            message.gold = object.gold | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sleakEnemy message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sleakEnemy
     * @static
     * @param {c2sleakEnemy} message c2sleakEnemy
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sleakEnemy.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.arrays || options.defaults)
            object.enmeys = [];
        if (options.defaults) {
            object.userId = 0;
            object.gold = 0;
        }
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        if (message.enmeys && message.enmeys.length) {
            object.enmeys = [];
            for (var j = 0; j < message.enmeys.length; ++j)
                object.enmeys[j] = message.enmeys[j];
        }
        if (message.gold != null && message.hasOwnProperty("gold"))
            object.gold = message.gold;
        return object;
    };

    /**
     * Converts this c2sleakEnemy to JSON.
     * @function toJSON
     * @memberof c2sleakEnemy
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sleakEnemy.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sleakEnemy;
})();

$root.s2cleakEnemy = (function() {

    /**
     * Properties of a s2cleakEnemy.
     * @exports Is2cleakEnemy
     * @interface Is2cleakEnemy
     * @property {number} userId s2cleakEnemy userId
     * @property {Array.<number>|null} [enmeys] s2cleakEnemy enmeys
     * @property {Array.<Ilocation>|null} [enmeysPosition] s2cleakEnemy enmeysPosition
     */

    /**
     * Constructs a new s2cleakEnemy.
     * @exports s2cleakEnemy
     * @classdesc Represents a s2cleakEnemy.
     * @implements Is2cleakEnemy
     * @constructor
     * @param {Is2cleakEnemy=} [properties] Properties to set
     */
    function s2cleakEnemy(properties) {
        this.enmeys = [];
        this.enmeysPosition = [];
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cleakEnemy userId.
     * @member {number} userId
     * @memberof s2cleakEnemy
     * @instance
     */
    s2cleakEnemy.prototype.userId = 0;

    /**
     * s2cleakEnemy enmeys.
     * @member {Array.<number>} enmeys
     * @memberof s2cleakEnemy
     * @instance
     */
    s2cleakEnemy.prototype.enmeys = $util.emptyArray;

    /**
     * s2cleakEnemy enmeysPosition.
     * @member {Array.<Ilocation>} enmeysPosition
     * @memberof s2cleakEnemy
     * @instance
     */
    s2cleakEnemy.prototype.enmeysPosition = $util.emptyArray;

    /**
     * Creates a new s2cleakEnemy instance using the specified properties.
     * @function create
     * @memberof s2cleakEnemy
     * @static
     * @param {Is2cleakEnemy=} [properties] Properties to set
     * @returns {s2cleakEnemy} s2cleakEnemy instance
     */
    s2cleakEnemy.create = function create(properties) {
        return new s2cleakEnemy(properties);
    };

    /**
     * Encodes the specified s2cleakEnemy message. Does not implicitly {@link s2cleakEnemy.verify|verify} messages.
     * @function encode
     * @memberof s2cleakEnemy
     * @static
     * @param {Is2cleakEnemy} message s2cleakEnemy message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cleakEnemy.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userId);
        if (message.enmeys != null && message.enmeys.length) {
            writer.uint32(/* id 2, wireType 2 =*/18).fork();
            for (var i = 0; i < message.enmeys.length; ++i)
                writer.int32(message.enmeys[i]);
            writer.ldelim();
        }
        if (message.enmeysPosition != null && message.enmeysPosition.length)
            for (var i = 0; i < message.enmeysPosition.length; ++i)
                $root.location.encode(message.enmeysPosition[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
        return writer;
    };

    /**
     * Encodes the specified s2cleakEnemy message, length delimited. Does not implicitly {@link s2cleakEnemy.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cleakEnemy
     * @static
     * @param {Is2cleakEnemy} message s2cleakEnemy message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cleakEnemy.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cleakEnemy message from the specified reader or buffer.
     * @function decode
     * @memberof s2cleakEnemy
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cleakEnemy} s2cleakEnemy
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cleakEnemy.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cleakEnemy();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userId = reader.int32();
                break;
            case 2:
                if (!(message.enmeys && message.enmeys.length))
                    message.enmeys = [];
                if ((tag & 7) === 2) {
                    var end2 = reader.uint32() + reader.pos;
                    while (reader.pos < end2)
                        message.enmeys.push(reader.int32());
                } else
                    message.enmeys.push(reader.int32());
                break;
            case 3:
                if (!(message.enmeysPosition && message.enmeysPosition.length))
                    message.enmeysPosition = [];
                message.enmeysPosition.push($root.location.decode(reader, reader.uint32()));
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cleakEnemy message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cleakEnemy
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cleakEnemy} s2cleakEnemy
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cleakEnemy.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cleakEnemy message.
     * @function verify
     * @memberof s2cleakEnemy
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cleakEnemy.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        if (message.enmeys != null && message.hasOwnProperty("enmeys")) {
            if (!Array.isArray(message.enmeys))
                return "enmeys: array expected";
            for (var i = 0; i < message.enmeys.length; ++i)
                if (!$util.isInteger(message.enmeys[i]))
                    return "enmeys: integer[] expected";
        }
        if (message.enmeysPosition != null && message.hasOwnProperty("enmeysPosition")) {
            if (!Array.isArray(message.enmeysPosition))
                return "enmeysPosition: array expected";
            for (var i = 0; i < message.enmeysPosition.length; ++i) {
                var error = $root.location.verify(message.enmeysPosition[i]);
                if (error)
                    return "enmeysPosition." + error;
            }
        }
        return null;
    };

    /**
     * Creates a s2cleakEnemy message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cleakEnemy
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cleakEnemy} s2cleakEnemy
     */
    s2cleakEnemy.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cleakEnemy)
            return object;
        var message = new $root.s2cleakEnemy();
        if (object.userId != null)
            message.userId = object.userId | 0;
        if (object.enmeys) {
            if (!Array.isArray(object.enmeys))
                throw TypeError(".s2cleakEnemy.enmeys: array expected");
            message.enmeys = [];
            for (var i = 0; i < object.enmeys.length; ++i)
                message.enmeys[i] = object.enmeys[i] | 0;
        }
        if (object.enmeysPosition) {
            if (!Array.isArray(object.enmeysPosition))
                throw TypeError(".s2cleakEnemy.enmeysPosition: array expected");
            message.enmeysPosition = [];
            for (var i = 0; i < object.enmeysPosition.length; ++i) {
                if (typeof object.enmeysPosition[i] !== "object")
                    throw TypeError(".s2cleakEnemy.enmeysPosition: object expected");
                message.enmeysPosition[i] = $root.location.fromObject(object.enmeysPosition[i]);
            }
        }
        return message;
    };

    /**
     * Creates a plain object from a s2cleakEnemy message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cleakEnemy
     * @static
     * @param {s2cleakEnemy} message s2cleakEnemy
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cleakEnemy.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.arrays || options.defaults) {
            object.enmeys = [];
            object.enmeysPosition = [];
        }
        if (options.defaults)
            object.userId = 0;
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        if (message.enmeys && message.enmeys.length) {
            object.enmeys = [];
            for (var j = 0; j < message.enmeys.length; ++j)
                object.enmeys[j] = message.enmeys[j];
        }
        if (message.enmeysPosition && message.enmeysPosition.length) {
            object.enmeysPosition = [];
            for (var j = 0; j < message.enmeysPosition.length; ++j)
                object.enmeysPosition[j] = $root.location.toObject(message.enmeysPosition[j], options);
        }
        return object;
    };

    /**
     * Converts this s2cleakEnemy to JSON.
     * @function toJSON
     * @memberof s2cleakEnemy
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cleakEnemy.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cleakEnemy;
})();

$root.c2sskill = (function() {

    /**
     * Properties of a c2sskill.
     * @exports Ic2sskill
     * @interface Ic2sskill
     * @property {number} userId c2sskill userId
     * @property {number} type c2sskill type
     * @property {number} skill c2sskill skill
     */

    /**
     * Constructs a new c2sskill.
     * @exports c2sskill
     * @classdesc Represents a c2sskill.
     * @implements Ic2sskill
     * @constructor
     * @param {Ic2sskill=} [properties] Properties to set
     */
    function c2sskill(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sskill userId.
     * @member {number} userId
     * @memberof c2sskill
     * @instance
     */
    c2sskill.prototype.userId = 0;

    /**
     * c2sskill type.
     * @member {number} type
     * @memberof c2sskill
     * @instance
     */
    c2sskill.prototype.type = 0;

    /**
     * c2sskill skill.
     * @member {number} skill
     * @memberof c2sskill
     * @instance
     */
    c2sskill.prototype.skill = 0;

    /**
     * Creates a new c2sskill instance using the specified properties.
     * @function create
     * @memberof c2sskill
     * @static
     * @param {Ic2sskill=} [properties] Properties to set
     * @returns {c2sskill} c2sskill instance
     */
    c2sskill.create = function create(properties) {
        return new c2sskill(properties);
    };

    /**
     * Encodes the specified c2sskill message. Does not implicitly {@link c2sskill.verify|verify} messages.
     * @function encode
     * @memberof c2sskill
     * @static
     * @param {Ic2sskill} message c2sskill message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sskill.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userId);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.type);
        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.skill);
        return writer;
    };

    /**
     * Encodes the specified c2sskill message, length delimited. Does not implicitly {@link c2sskill.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sskill
     * @static
     * @param {Ic2sskill} message c2sskill message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sskill.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sskill message from the specified reader or buffer.
     * @function decode
     * @memberof c2sskill
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sskill} c2sskill
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sskill.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sskill();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userId = reader.int32();
                break;
            case 2:
                message.type = reader.int32();
                break;
            case 3:
                message.skill = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        if (!message.hasOwnProperty("type"))
            throw $util.ProtocolError("missing required 'type'", { instance: message });
        if (!message.hasOwnProperty("skill"))
            throw $util.ProtocolError("missing required 'skill'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sskill message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sskill
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sskill} c2sskill
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sskill.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sskill message.
     * @function verify
     * @memberof c2sskill
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sskill.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        if (!$util.isInteger(message.type))
            return "type: integer expected";
        if (!$util.isInteger(message.skill))
            return "skill: integer expected";
        return null;
    };

    /**
     * Creates a c2sskill message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sskill
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sskill} c2sskill
     */
    c2sskill.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sskill)
            return object;
        var message = new $root.c2sskill();
        if (object.userId != null)
            message.userId = object.userId | 0;
        if (object.type != null)
            message.type = object.type | 0;
        if (object.skill != null)
            message.skill = object.skill | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sskill message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sskill
     * @static
     * @param {c2sskill} message c2sskill
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sskill.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.userId = 0;
            object.type = 0;
            object.skill = 0;
        }
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        if (message.type != null && message.hasOwnProperty("type"))
            object.type = message.type;
        if (message.skill != null && message.hasOwnProperty("skill"))
            object.skill = message.skill;
        return object;
    };

    /**
     * Converts this c2sskill to JSON.
     * @function toJSON
     * @memberof c2sskill
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sskill.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sskill;
})();

$root.s2cskill = (function() {

    /**
     * Properties of a s2cskill.
     * @exports Is2cskill
     * @interface Is2cskill
     * @property {number} type s2cskill type
     * @property {number} skill s2cskill skill
     */

    /**
     * Constructs a new s2cskill.
     * @exports s2cskill
     * @classdesc Represents a s2cskill.
     * @implements Is2cskill
     * @constructor
     * @param {Is2cskill=} [properties] Properties to set
     */
    function s2cskill(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cskill type.
     * @member {number} type
     * @memberof s2cskill
     * @instance
     */
    s2cskill.prototype.type = 0;

    /**
     * s2cskill skill.
     * @member {number} skill
     * @memberof s2cskill
     * @instance
     */
    s2cskill.prototype.skill = 0;

    /**
     * Creates a new s2cskill instance using the specified properties.
     * @function create
     * @memberof s2cskill
     * @static
     * @param {Is2cskill=} [properties] Properties to set
     * @returns {s2cskill} s2cskill instance
     */
    s2cskill.create = function create(properties) {
        return new s2cskill(properties);
    };

    /**
     * Encodes the specified s2cskill message. Does not implicitly {@link s2cskill.verify|verify} messages.
     * @function encode
     * @memberof s2cskill
     * @static
     * @param {Is2cskill} message s2cskill message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cskill.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.skill);
        return writer;
    };

    /**
     * Encodes the specified s2cskill message, length delimited. Does not implicitly {@link s2cskill.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cskill
     * @static
     * @param {Is2cskill} message s2cskill message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cskill.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cskill message from the specified reader or buffer.
     * @function decode
     * @memberof s2cskill
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cskill} s2cskill
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cskill.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cskill();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.type = reader.int32();
                break;
            case 2:
                message.skill = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("type"))
            throw $util.ProtocolError("missing required 'type'", { instance: message });
        if (!message.hasOwnProperty("skill"))
            throw $util.ProtocolError("missing required 'skill'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cskill message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cskill
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cskill} s2cskill
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cskill.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cskill message.
     * @function verify
     * @memberof s2cskill
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cskill.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.type))
            return "type: integer expected";
        if (!$util.isInteger(message.skill))
            return "skill: integer expected";
        return null;
    };

    /**
     * Creates a s2cskill message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cskill
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cskill} s2cskill
     */
    s2cskill.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cskill)
            return object;
        var message = new $root.s2cskill();
        if (object.type != null)
            message.type = object.type | 0;
        if (object.skill != null)
            message.skill = object.skill | 0;
        return message;
    };

    /**
     * Creates a plain object from a s2cskill message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cskill
     * @static
     * @param {s2cskill} message s2cskill
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cskill.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.type = 0;
            object.skill = 0;
        }
        if (message.type != null && message.hasOwnProperty("type"))
            object.type = message.type;
        if (message.skill != null && message.hasOwnProperty("skill"))
            object.skill = message.skill;
        return object;
    };

    /**
     * Converts this s2cskill to JSON.
     * @function toJSON
     * @memberof s2cskill
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cskill.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cskill;
})();

$root.s2cgetGold = (function() {

    /**
     * Properties of a s2cgetGold.
     * @exports Is2cgetGold
     * @interface Is2cgetGold
     * @property {number} gold s2cgetGold gold
     */

    /**
     * Constructs a new s2cgetGold.
     * @exports s2cgetGold
     * @classdesc Represents a s2cgetGold.
     * @implements Is2cgetGold
     * @constructor
     * @param {Is2cgetGold=} [properties] Properties to set
     */
    function s2cgetGold(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cgetGold gold.
     * @member {number} gold
     * @memberof s2cgetGold
     * @instance
     */
    s2cgetGold.prototype.gold = 0;

    /**
     * Creates a new s2cgetGold instance using the specified properties.
     * @function create
     * @memberof s2cgetGold
     * @static
     * @param {Is2cgetGold=} [properties] Properties to set
     * @returns {s2cgetGold} s2cgetGold instance
     */
    s2cgetGold.create = function create(properties) {
        return new s2cgetGold(properties);
    };

    /**
     * Encodes the specified s2cgetGold message. Does not implicitly {@link s2cgetGold.verify|verify} messages.
     * @function encode
     * @memberof s2cgetGold
     * @static
     * @param {Is2cgetGold} message s2cgetGold message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cgetGold.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.gold);
        return writer;
    };

    /**
     * Encodes the specified s2cgetGold message, length delimited. Does not implicitly {@link s2cgetGold.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cgetGold
     * @static
     * @param {Is2cgetGold} message s2cgetGold message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cgetGold.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cgetGold message from the specified reader or buffer.
     * @function decode
     * @memberof s2cgetGold
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cgetGold} s2cgetGold
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cgetGold.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cgetGold();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.gold = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("gold"))
            throw $util.ProtocolError("missing required 'gold'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cgetGold message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cgetGold
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cgetGold} s2cgetGold
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cgetGold.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cgetGold message.
     * @function verify
     * @memberof s2cgetGold
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cgetGold.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.gold))
            return "gold: integer expected";
        return null;
    };

    /**
     * Creates a s2cgetGold message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cgetGold
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cgetGold} s2cgetGold
     */
    s2cgetGold.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cgetGold)
            return object;
        var message = new $root.s2cgetGold();
        if (object.gold != null)
            message.gold = object.gold | 0;
        return message;
    };

    /**
     * Creates a plain object from a s2cgetGold message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cgetGold
     * @static
     * @param {s2cgetGold} message s2cgetGold
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cgetGold.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults)
            object.gold = 0;
        if (message.gold != null && message.hasOwnProperty("gold"))
            object.gold = message.gold;
        return object;
    };

    /**
     * Converts this s2cgetGold to JSON.
     * @function toJSON
     * @memberof s2cgetGold
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cgetGold.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cgetGold;
})();

$root.c2stoNext = (function() {

    /**
     * Properties of a c2stoNext.
     * @exports Ic2stoNext
     * @interface Ic2stoNext
     * @property {number} userId c2stoNext userId
     * @property {number} isToNext c2stoNext isToNext
     */

    /**
     * Constructs a new c2stoNext.
     * @exports c2stoNext
     * @classdesc Represents a c2stoNext.
     * @implements Ic2stoNext
     * @constructor
     * @param {Ic2stoNext=} [properties] Properties to set
     */
    function c2stoNext(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2stoNext userId.
     * @member {number} userId
     * @memberof c2stoNext
     * @instance
     */
    c2stoNext.prototype.userId = 0;

    /**
     * c2stoNext isToNext.
     * @member {number} isToNext
     * @memberof c2stoNext
     * @instance
     */
    c2stoNext.prototype.isToNext = 0;

    /**
     * Creates a new c2stoNext instance using the specified properties.
     * @function create
     * @memberof c2stoNext
     * @static
     * @param {Ic2stoNext=} [properties] Properties to set
     * @returns {c2stoNext} c2stoNext instance
     */
    c2stoNext.create = function create(properties) {
        return new c2stoNext(properties);
    };

    /**
     * Encodes the specified c2stoNext message. Does not implicitly {@link c2stoNext.verify|verify} messages.
     * @function encode
     * @memberof c2stoNext
     * @static
     * @param {Ic2stoNext} message c2stoNext message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2stoNext.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userId);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.isToNext);
        return writer;
    };

    /**
     * Encodes the specified c2stoNext message, length delimited. Does not implicitly {@link c2stoNext.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2stoNext
     * @static
     * @param {Ic2stoNext} message c2stoNext message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2stoNext.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2stoNext message from the specified reader or buffer.
     * @function decode
     * @memberof c2stoNext
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2stoNext} c2stoNext
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2stoNext.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2stoNext();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userId = reader.int32();
                break;
            case 2:
                message.isToNext = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        if (!message.hasOwnProperty("isToNext"))
            throw $util.ProtocolError("missing required 'isToNext'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2stoNext message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2stoNext
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2stoNext} c2stoNext
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2stoNext.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2stoNext message.
     * @function verify
     * @memberof c2stoNext
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2stoNext.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        if (!$util.isInteger(message.isToNext))
            return "isToNext: integer expected";
        return null;
    };

    /**
     * Creates a c2stoNext message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2stoNext
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2stoNext} c2stoNext
     */
    c2stoNext.fromObject = function fromObject(object) {
        if (object instanceof $root.c2stoNext)
            return object;
        var message = new $root.c2stoNext();
        if (object.userId != null)
            message.userId = object.userId | 0;
        if (object.isToNext != null)
            message.isToNext = object.isToNext | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2stoNext message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2stoNext
     * @static
     * @param {c2stoNext} message c2stoNext
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2stoNext.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.userId = 0;
            object.isToNext = 0;
        }
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        if (message.isToNext != null && message.hasOwnProperty("isToNext"))
            object.isToNext = message.isToNext;
        return object;
    };

    /**
     * Converts this c2stoNext to JSON.
     * @function toJSON
     * @memberof c2stoNext
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2stoNext.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2stoNext;
})();

$root.s2ctoNext = (function() {

    /**
     * Properties of a s2ctoNext.
     * @exports Is2ctoNext
     * @interface Is2ctoNext
     * @property {number} userId s2ctoNext userId
     * @property {number} isToNext s2ctoNext isToNext
     */

    /**
     * Constructs a new s2ctoNext.
     * @exports s2ctoNext
     * @classdesc Represents a s2ctoNext.
     * @implements Is2ctoNext
     * @constructor
     * @param {Is2ctoNext=} [properties] Properties to set
     */
    function s2ctoNext(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2ctoNext userId.
     * @member {number} userId
     * @memberof s2ctoNext
     * @instance
     */
    s2ctoNext.prototype.userId = 0;

    /**
     * s2ctoNext isToNext.
     * @member {number} isToNext
     * @memberof s2ctoNext
     * @instance
     */
    s2ctoNext.prototype.isToNext = 0;

    /**
     * Creates a new s2ctoNext instance using the specified properties.
     * @function create
     * @memberof s2ctoNext
     * @static
     * @param {Is2ctoNext=} [properties] Properties to set
     * @returns {s2ctoNext} s2ctoNext instance
     */
    s2ctoNext.create = function create(properties) {
        return new s2ctoNext(properties);
    };

    /**
     * Encodes the specified s2ctoNext message. Does not implicitly {@link s2ctoNext.verify|verify} messages.
     * @function encode
     * @memberof s2ctoNext
     * @static
     * @param {Is2ctoNext} message s2ctoNext message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2ctoNext.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userId);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.isToNext);
        return writer;
    };

    /**
     * Encodes the specified s2ctoNext message, length delimited. Does not implicitly {@link s2ctoNext.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2ctoNext
     * @static
     * @param {Is2ctoNext} message s2ctoNext message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2ctoNext.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2ctoNext message from the specified reader or buffer.
     * @function decode
     * @memberof s2ctoNext
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2ctoNext} s2ctoNext
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2ctoNext.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2ctoNext();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userId = reader.int32();
                break;
            case 2:
                message.isToNext = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        if (!message.hasOwnProperty("isToNext"))
            throw $util.ProtocolError("missing required 'isToNext'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2ctoNext message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2ctoNext
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2ctoNext} s2ctoNext
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2ctoNext.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2ctoNext message.
     * @function verify
     * @memberof s2ctoNext
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2ctoNext.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        if (!$util.isInteger(message.isToNext))
            return "isToNext: integer expected";
        return null;
    };

    /**
     * Creates a s2ctoNext message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2ctoNext
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2ctoNext} s2ctoNext
     */
    s2ctoNext.fromObject = function fromObject(object) {
        if (object instanceof $root.s2ctoNext)
            return object;
        var message = new $root.s2ctoNext();
        if (object.userId != null)
            message.userId = object.userId | 0;
        if (object.isToNext != null)
            message.isToNext = object.isToNext | 0;
        return message;
    };

    /**
     * Creates a plain object from a s2ctoNext message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2ctoNext
     * @static
     * @param {s2ctoNext} message s2ctoNext
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2ctoNext.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.userId = 0;
            object.isToNext = 0;
        }
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        if (message.isToNext != null && message.hasOwnProperty("isToNext"))
            object.isToNext = message.isToNext;
        return object;
    };

    /**
     * Converts this s2ctoNext to JSON.
     * @function toJSON
     * @memberof s2ctoNext
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2ctoNext.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2ctoNext;
})();

$root.c2sinvite = (function() {

    /**
     * Properties of a c2sinvite.
     * @exports Ic2sinvite
     * @interface Ic2sinvite
     * @property {number} userId c2sinvite userId
     * @property {number} invitation c2sinvite invitation
     */

    /**
     * Constructs a new c2sinvite.
     * @exports c2sinvite
     * @classdesc Represents a c2sinvite.
     * @implements Ic2sinvite
     * @constructor
     * @param {Ic2sinvite=} [properties] Properties to set
     */
    function c2sinvite(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sinvite userId.
     * @member {number} userId
     * @memberof c2sinvite
     * @instance
     */
    c2sinvite.prototype.userId = 0;

    /**
     * c2sinvite invitation.
     * @member {number} invitation
     * @memberof c2sinvite
     * @instance
     */
    c2sinvite.prototype.invitation = 0;

    /**
     * Creates a new c2sinvite instance using the specified properties.
     * @function create
     * @memberof c2sinvite
     * @static
     * @param {Ic2sinvite=} [properties] Properties to set
     * @returns {c2sinvite} c2sinvite instance
     */
    c2sinvite.create = function create(properties) {
        return new c2sinvite(properties);
    };

    /**
     * Encodes the specified c2sinvite message. Does not implicitly {@link c2sinvite.verify|verify} messages.
     * @function encode
     * @memberof c2sinvite
     * @static
     * @param {Ic2sinvite} message c2sinvite message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sinvite.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userId);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.invitation);
        return writer;
    };

    /**
     * Encodes the specified c2sinvite message, length delimited. Does not implicitly {@link c2sinvite.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sinvite
     * @static
     * @param {Ic2sinvite} message c2sinvite message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sinvite.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sinvite message from the specified reader or buffer.
     * @function decode
     * @memberof c2sinvite
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sinvite} c2sinvite
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sinvite.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sinvite();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.userId = reader.int32();
                break;
            case 2:
                message.invitation = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        if (!message.hasOwnProperty("invitation"))
            throw $util.ProtocolError("missing required 'invitation'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sinvite message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sinvite
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sinvite} c2sinvite
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sinvite.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sinvite message.
     * @function verify
     * @memberof c2sinvite
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sinvite.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        if (!$util.isInteger(message.invitation))
            return "invitation: integer expected";
        return null;
    };

    /**
     * Creates a c2sinvite message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sinvite
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sinvite} c2sinvite
     */
    c2sinvite.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sinvite)
            return object;
        var message = new $root.c2sinvite();
        if (object.userId != null)
            message.userId = object.userId | 0;
        if (object.invitation != null)
            message.invitation = object.invitation | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sinvite message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sinvite
     * @static
     * @param {c2sinvite} message c2sinvite
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sinvite.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.userId = 0;
            object.invitation = 0;
        }
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        if (message.invitation != null && message.hasOwnProperty("invitation"))
            object.invitation = message.invitation;
        return object;
    };

    /**
     * Converts this c2sinvite to JSON.
     * @function toJSON
     * @memberof c2sinvite
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sinvite.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sinvite;
})();

$root.s2cErroMessage = (function() {

    /**
     * Properties of a s2cErroMessage.
     * @exports Is2cErroMessage
     * @interface Is2cErroMessage
     * @property {number} errorId s2cErroMessage errorId
     * @property {string} errorMessage s2cErroMessage errorMessage
     */

    /**
     * Constructs a new s2cErroMessage.
     * @exports s2cErroMessage
     * @classdesc Represents a s2cErroMessage.
     * @implements Is2cErroMessage
     * @constructor
     * @param {Is2cErroMessage=} [properties] Properties to set
     */
    function s2cErroMessage(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cErroMessage errorId.
     * @member {number} errorId
     * @memberof s2cErroMessage
     * @instance
     */
    s2cErroMessage.prototype.errorId = 0;

    /**
     * s2cErroMessage errorMessage.
     * @member {string} errorMessage
     * @memberof s2cErroMessage
     * @instance
     */
    s2cErroMessage.prototype.errorMessage = "";

    /**
     * Creates a new s2cErroMessage instance using the specified properties.
     * @function create
     * @memberof s2cErroMessage
     * @static
     * @param {Is2cErroMessage=} [properties] Properties to set
     * @returns {s2cErroMessage} s2cErroMessage instance
     */
    s2cErroMessage.create = function create(properties) {
        return new s2cErroMessage(properties);
    };

    /**
     * Encodes the specified s2cErroMessage message. Does not implicitly {@link s2cErroMessage.verify|verify} messages.
     * @function encode
     * @memberof s2cErroMessage
     * @static
     * @param {Is2cErroMessage} message s2cErroMessage message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cErroMessage.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.errorId);
        writer.uint32(/* id 2, wireType 2 =*/18).string(message.errorMessage);
        return writer;
    };

    /**
     * Encodes the specified s2cErroMessage message, length delimited. Does not implicitly {@link s2cErroMessage.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cErroMessage
     * @static
     * @param {Is2cErroMessage} message s2cErroMessage message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cErroMessage.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cErroMessage message from the specified reader or buffer.
     * @function decode
     * @memberof s2cErroMessage
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cErroMessage} s2cErroMessage
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cErroMessage.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cErroMessage();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.errorId = reader.int32();
                break;
            case 2:
                message.errorMessage = reader.string();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("errorId"))
            throw $util.ProtocolError("missing required 'errorId'", { instance: message });
        if (!message.hasOwnProperty("errorMessage"))
            throw $util.ProtocolError("missing required 'errorMessage'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cErroMessage message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cErroMessage
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cErroMessage} s2cErroMessage
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cErroMessage.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cErroMessage message.
     * @function verify
     * @memberof s2cErroMessage
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cErroMessage.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.errorId))
            return "errorId: integer expected";
        if (!$util.isString(message.errorMessage))
            return "errorMessage: string expected";
        return null;
    };

    /**
     * Creates a s2cErroMessage message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cErroMessage
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cErroMessage} s2cErroMessage
     */
    s2cErroMessage.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cErroMessage)
            return object;
        var message = new $root.s2cErroMessage();
        if (object.errorId != null)
            message.errorId = object.errorId | 0;
        if (object.errorMessage != null)
            message.errorMessage = String(object.errorMessage);
        return message;
    };

    /**
     * Creates a plain object from a s2cErroMessage message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cErroMessage
     * @static
     * @param {s2cErroMessage} message s2cErroMessage
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cErroMessage.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.errorId = 0;
            object.errorMessage = "";
        }
        if (message.errorId != null && message.hasOwnProperty("errorId"))
            object.errorId = message.errorId;
        if (message.errorMessage != null && message.hasOwnProperty("errorMessage"))
            object.errorMessage = message.errorMessage;
        return object;
    };

    /**
     * Converts this s2cErroMessage to JSON.
     * @function toJSON
     * @memberof s2cErroMessage
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cErroMessage.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cErroMessage;
})();

$root.c2sEnterRoom = (function() {

    /**
     * Properties of a c2sEnterRoom.
     * @exports Ic2sEnterRoom
     * @interface Ic2sEnterRoom
     * @property {number} account c2sEnterRoom account
     * @property {string} deessUp c2sEnterRoom deessUp
     */

    /**
     * Constructs a new c2sEnterRoom.
     * @exports c2sEnterRoom
     * @classdesc Represents a c2sEnterRoom.
     * @implements Ic2sEnterRoom
     * @constructor
     * @param {Ic2sEnterRoom=} [properties] Properties to set
     */
    function c2sEnterRoom(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sEnterRoom account.
     * @member {number} account
     * @memberof c2sEnterRoom
     * @instance
     */
    c2sEnterRoom.prototype.account = 0;

    /**
     * c2sEnterRoom deessUp.
     * @member {string} deessUp
     * @memberof c2sEnterRoom
     * @instance
     */
    c2sEnterRoom.prototype.deessUp = "";

    /**
     * Creates a new c2sEnterRoom instance using the specified properties.
     * @function create
     * @memberof c2sEnterRoom
     * @static
     * @param {Ic2sEnterRoom=} [properties] Properties to set
     * @returns {c2sEnterRoom} c2sEnterRoom instance
     */
    c2sEnterRoom.create = function create(properties) {
        return new c2sEnterRoom(properties);
    };

    /**
     * Encodes the specified c2sEnterRoom message. Does not implicitly {@link c2sEnterRoom.verify|verify} messages.
     * @function encode
     * @memberof c2sEnterRoom
     * @static
     * @param {Ic2sEnterRoom} message c2sEnterRoom message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sEnterRoom.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.account);
        writer.uint32(/* id 2, wireType 2 =*/18).string(message.deessUp);
        return writer;
    };

    /**
     * Encodes the specified c2sEnterRoom message, length delimited. Does not implicitly {@link c2sEnterRoom.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sEnterRoom
     * @static
     * @param {Ic2sEnterRoom} message c2sEnterRoom message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sEnterRoom.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sEnterRoom message from the specified reader or buffer.
     * @function decode
     * @memberof c2sEnterRoom
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sEnterRoom} c2sEnterRoom
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sEnterRoom.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sEnterRoom();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.account = reader.int32();
                break;
            case 2:
                message.deessUp = reader.string();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("account"))
            throw $util.ProtocolError("missing required 'account'", { instance: message });
        if (!message.hasOwnProperty("deessUp"))
            throw $util.ProtocolError("missing required 'deessUp'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sEnterRoom message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sEnterRoom
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sEnterRoom} c2sEnterRoom
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sEnterRoom.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sEnterRoom message.
     * @function verify
     * @memberof c2sEnterRoom
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sEnterRoom.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.account))
            return "account: integer expected";
        if (!$util.isString(message.deessUp))
            return "deessUp: string expected";
        return null;
    };

    /**
     * Creates a c2sEnterRoom message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sEnterRoom
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sEnterRoom} c2sEnterRoom
     */
    c2sEnterRoom.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sEnterRoom)
            return object;
        var message = new $root.c2sEnterRoom();
        if (object.account != null)
            message.account = object.account | 0;
        if (object.deessUp != null)
            message.deessUp = String(object.deessUp);
        return message;
    };

    /**
     * Creates a plain object from a c2sEnterRoom message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sEnterRoom
     * @static
     * @param {c2sEnterRoom} message c2sEnterRoom
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sEnterRoom.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.account = 0;
            object.deessUp = "";
        }
        if (message.account != null && message.hasOwnProperty("account"))
            object.account = message.account;
        if (message.deessUp != null && message.hasOwnProperty("deessUp"))
            object.deessUp = message.deessUp;
        return object;
    };

    /**
     * Converts this c2sEnterRoom to JSON.
     * @function toJSON
     * @memberof c2sEnterRoom
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sEnterRoom.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sEnterRoom;
})();

$root.s2cEnterRoom = (function() {

    /**
     * Properties of a s2cEnterRoom.
     * @exports Is2cEnterRoom
     * @interface Is2cEnterRoom
     * @property {number} gameWidth s2cEnterRoom gameWidth
     * @property {number} gameHeight s2cEnterRoom gameHeight
     * @property {number} roomId s2cEnterRoom roomId
     * @property {number} roomTime s2cEnterRoom roomTime
     * @property {number|Long} roomStartTime s2cEnterRoom roomStartTime
     */

    /**
     * Constructs a new s2cEnterRoom.
     * @exports s2cEnterRoom
     * @classdesc Represents a s2cEnterRoom.
     * @implements Is2cEnterRoom
     * @constructor
     * @param {Is2cEnterRoom=} [properties] Properties to set
     */
    function s2cEnterRoom(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cEnterRoom gameWidth.
     * @member {number} gameWidth
     * @memberof s2cEnterRoom
     * @instance
     */
    s2cEnterRoom.prototype.gameWidth = 0;

    /**
     * s2cEnterRoom gameHeight.
     * @member {number} gameHeight
     * @memberof s2cEnterRoom
     * @instance
     */
    s2cEnterRoom.prototype.gameHeight = 0;

    /**
     * s2cEnterRoom roomId.
     * @member {number} roomId
     * @memberof s2cEnterRoom
     * @instance
     */
    s2cEnterRoom.prototype.roomId = 0;

    /**
     * s2cEnterRoom roomTime.
     * @member {number} roomTime
     * @memberof s2cEnterRoom
     * @instance
     */
    s2cEnterRoom.prototype.roomTime = 0;

    /**
     * s2cEnterRoom roomStartTime.
     * @member {number|Long} roomStartTime
     * @memberof s2cEnterRoom
     * @instance
     */
    s2cEnterRoom.prototype.roomStartTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

    /**
     * Creates a new s2cEnterRoom instance using the specified properties.
     * @function create
     * @memberof s2cEnterRoom
     * @static
     * @param {Is2cEnterRoom=} [properties] Properties to set
     * @returns {s2cEnterRoom} s2cEnterRoom instance
     */
    s2cEnterRoom.create = function create(properties) {
        return new s2cEnterRoom(properties);
    };

    /**
     * Encodes the specified s2cEnterRoom message. Does not implicitly {@link s2cEnterRoom.verify|verify} messages.
     * @function encode
     * @memberof s2cEnterRoom
     * @static
     * @param {Is2cEnterRoom} message s2cEnterRoom message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cEnterRoom.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.gameWidth);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.gameHeight);
        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.roomId);
        writer.uint32(/* id 4, wireType 0 =*/32).int32(message.roomTime);
        writer.uint32(/* id 5, wireType 0 =*/40).int64(message.roomStartTime);
        return writer;
    };

    /**
     * Encodes the specified s2cEnterRoom message, length delimited. Does not implicitly {@link s2cEnterRoom.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cEnterRoom
     * @static
     * @param {Is2cEnterRoom} message s2cEnterRoom message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cEnterRoom.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cEnterRoom message from the specified reader or buffer.
     * @function decode
     * @memberof s2cEnterRoom
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cEnterRoom} s2cEnterRoom
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cEnterRoom.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cEnterRoom();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.gameWidth = reader.int32();
                break;
            case 2:
                message.gameHeight = reader.int32();
                break;
            case 3:
                message.roomId = reader.int32();
                break;
            case 4:
                message.roomTime = reader.int32();
                break;
            case 5:
                message.roomStartTime = reader.int64();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("gameWidth"))
            throw $util.ProtocolError("missing required 'gameWidth'", { instance: message });
        if (!message.hasOwnProperty("gameHeight"))
            throw $util.ProtocolError("missing required 'gameHeight'", { instance: message });
        if (!message.hasOwnProperty("roomId"))
            throw $util.ProtocolError("missing required 'roomId'", { instance: message });
        if (!message.hasOwnProperty("roomTime"))
            throw $util.ProtocolError("missing required 'roomTime'", { instance: message });
        if (!message.hasOwnProperty("roomStartTime"))
            throw $util.ProtocolError("missing required 'roomStartTime'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cEnterRoom message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cEnterRoom
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cEnterRoom} s2cEnterRoom
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cEnterRoom.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cEnterRoom message.
     * @function verify
     * @memberof s2cEnterRoom
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cEnterRoom.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.gameWidth))
            return "gameWidth: integer expected";
        if (!$util.isInteger(message.gameHeight))
            return "gameHeight: integer expected";
        if (!$util.isInteger(message.roomId))
            return "roomId: integer expected";
        if (!$util.isInteger(message.roomTime))
            return "roomTime: integer expected";
        if (!$util.isInteger(message.roomStartTime) && !(message.roomStartTime && $util.isInteger(message.roomStartTime.low) && $util.isInteger(message.roomStartTime.high)))
            return "roomStartTime: integer|Long expected";
        return null;
    };

    /**
     * Creates a s2cEnterRoom message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cEnterRoom
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cEnterRoom} s2cEnterRoom
     */
    s2cEnterRoom.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cEnterRoom)
            return object;
        var message = new $root.s2cEnterRoom();
        if (object.gameWidth != null)
            message.gameWidth = object.gameWidth | 0;
        if (object.gameHeight != null)
            message.gameHeight = object.gameHeight | 0;
        if (object.roomId != null)
            message.roomId = object.roomId | 0;
        if (object.roomTime != null)
            message.roomTime = object.roomTime | 0;
        if (object.roomStartTime != null)
            if ($util.Long)
                (message.roomStartTime = $util.Long.fromValue(object.roomStartTime)).unsigned = false;
            else if (typeof object.roomStartTime === "string")
                message.roomStartTime = parseInt(object.roomStartTime, 10);
            else if (typeof object.roomStartTime === "number")
                message.roomStartTime = object.roomStartTime;
            else if (typeof object.roomStartTime === "object")
                message.roomStartTime = new $util.LongBits(object.roomStartTime.low >>> 0, object.roomStartTime.high >>> 0).toNumber();
        return message;
    };

    /**
     * Creates a plain object from a s2cEnterRoom message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cEnterRoom
     * @static
     * @param {s2cEnterRoom} message s2cEnterRoom
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cEnterRoom.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.gameWidth = 0;
            object.gameHeight = 0;
            object.roomId = 0;
            object.roomTime = 0;
            if ($util.Long) {
                var long = new $util.Long(0, 0, false);
                object.roomStartTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
            } else
                object.roomStartTime = options.longs === String ? "0" : 0;
        }
        if (message.gameWidth != null && message.hasOwnProperty("gameWidth"))
            object.gameWidth = message.gameWidth;
        if (message.gameHeight != null && message.hasOwnProperty("gameHeight"))
            object.gameHeight = message.gameHeight;
        if (message.roomId != null && message.hasOwnProperty("roomId"))
            object.roomId = message.roomId;
        if (message.roomTime != null && message.hasOwnProperty("roomTime"))
            object.roomTime = message.roomTime;
        if (message.roomStartTime != null && message.hasOwnProperty("roomStartTime"))
            if (typeof message.roomStartTime === "number")
                object.roomStartTime = options.longs === String ? String(message.roomStartTime) : message.roomStartTime;
            else
                object.roomStartTime = options.longs === String ? $util.Long.prototype.toString.call(message.roomStartTime) : options.longs === Number ? new $util.LongBits(message.roomStartTime.low >>> 0, message.roomStartTime.high >>> 0).toNumber() : message.roomStartTime;
        return object;
    };

    /**
     * Converts this s2cEnterRoom to JSON.
     * @function toJSON
     * @memberof s2cEnterRoom
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cEnterRoom.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cEnterRoom;
})();

$root.c2sPlayerMove = (function() {

    /**
     * Properties of a c2sPlayerMove.
     * @exports Ic2sPlayerMove
     * @interface Ic2sPlayerMove
     * @property {number} account c2sPlayerMove account
     * @property {number} targetx c2sPlayerMove targetx
     * @property {number} targety c2sPlayerMove targety
     */

    /**
     * Constructs a new c2sPlayerMove.
     * @exports c2sPlayerMove
     * @classdesc Represents a c2sPlayerMove.
     * @implements Ic2sPlayerMove
     * @constructor
     * @param {Ic2sPlayerMove=} [properties] Properties to set
     */
    function c2sPlayerMove(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sPlayerMove account.
     * @member {number} account
     * @memberof c2sPlayerMove
     * @instance
     */
    c2sPlayerMove.prototype.account = 0;

    /**
     * c2sPlayerMove targetx.
     * @member {number} targetx
     * @memberof c2sPlayerMove
     * @instance
     */
    c2sPlayerMove.prototype.targetx = 0;

    /**
     * c2sPlayerMove targety.
     * @member {number} targety
     * @memberof c2sPlayerMove
     * @instance
     */
    c2sPlayerMove.prototype.targety = 0;

    /**
     * Creates a new c2sPlayerMove instance using the specified properties.
     * @function create
     * @memberof c2sPlayerMove
     * @static
     * @param {Ic2sPlayerMove=} [properties] Properties to set
     * @returns {c2sPlayerMove} c2sPlayerMove instance
     */
    c2sPlayerMove.create = function create(properties) {
        return new c2sPlayerMove(properties);
    };

    /**
     * Encodes the specified c2sPlayerMove message. Does not implicitly {@link c2sPlayerMove.verify|verify} messages.
     * @function encode
     * @memberof c2sPlayerMove
     * @static
     * @param {Ic2sPlayerMove} message c2sPlayerMove message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sPlayerMove.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.account);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.targetx);
        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.targety);
        return writer;
    };

    /**
     * Encodes the specified c2sPlayerMove message, length delimited. Does not implicitly {@link c2sPlayerMove.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sPlayerMove
     * @static
     * @param {Ic2sPlayerMove} message c2sPlayerMove message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sPlayerMove.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sPlayerMove message from the specified reader or buffer.
     * @function decode
     * @memberof c2sPlayerMove
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sPlayerMove} c2sPlayerMove
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sPlayerMove.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sPlayerMove();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.account = reader.int32();
                break;
            case 2:
                message.targetx = reader.int32();
                break;
            case 3:
                message.targety = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("account"))
            throw $util.ProtocolError("missing required 'account'", { instance: message });
        if (!message.hasOwnProperty("targetx"))
            throw $util.ProtocolError("missing required 'targetx'", { instance: message });
        if (!message.hasOwnProperty("targety"))
            throw $util.ProtocolError("missing required 'targety'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sPlayerMove message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sPlayerMove
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sPlayerMove} c2sPlayerMove
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sPlayerMove.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sPlayerMove message.
     * @function verify
     * @memberof c2sPlayerMove
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sPlayerMove.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.account))
            return "account: integer expected";
        if (!$util.isInteger(message.targetx))
            return "targetx: integer expected";
        if (!$util.isInteger(message.targety))
            return "targety: integer expected";
        return null;
    };

    /**
     * Creates a c2sPlayerMove message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sPlayerMove
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sPlayerMove} c2sPlayerMove
     */
    c2sPlayerMove.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sPlayerMove)
            return object;
        var message = new $root.c2sPlayerMove();
        if (object.account != null)
            message.account = object.account | 0;
        if (object.targetx != null)
            message.targetx = object.targetx | 0;
        if (object.targety != null)
            message.targety = object.targety | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sPlayerMove message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sPlayerMove
     * @static
     * @param {c2sPlayerMove} message c2sPlayerMove
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sPlayerMove.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.account = 0;
            object.targetx = 0;
            object.targety = 0;
        }
        if (message.account != null && message.hasOwnProperty("account"))
            object.account = message.account;
        if (message.targetx != null && message.hasOwnProperty("targetx"))
            object.targetx = message.targetx;
        if (message.targety != null && message.hasOwnProperty("targety"))
            object.targety = message.targety;
        return object;
    };

    /**
     * Converts this c2sPlayerMove to JSON.
     * @function toJSON
     * @memberof c2sPlayerMove
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sPlayerMove.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sPlayerMove;
})();

$root.s2cPlayerMove = (function() {

    /**
     * Properties of a s2cPlayerMove.
     * @exports Is2cPlayerMove
     * @interface Is2cPlayerMove
     * @property {Array.<IroomPlayerInfo>|null} [userData] s2cPlayerMove userData
     * @property {Array.<ImLine>|null} [lineData] s2cPlayerMove lineData
     * @property {Array.<ImProp>|null} [propData] s2cPlayerMove propData
     */

    /**
     * Constructs a new s2cPlayerMove.
     * @exports s2cPlayerMove
     * @classdesc Represents a s2cPlayerMove.
     * @implements Is2cPlayerMove
     * @constructor
     * @param {Is2cPlayerMove=} [properties] Properties to set
     */
    function s2cPlayerMove(properties) {
        this.userData = [];
        this.lineData = [];
        this.propData = [];
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cPlayerMove userData.
     * @member {Array.<IroomPlayerInfo>} userData
     * @memberof s2cPlayerMove
     * @instance
     */
    s2cPlayerMove.prototype.userData = $util.emptyArray;

    /**
     * s2cPlayerMove lineData.
     * @member {Array.<ImLine>} lineData
     * @memberof s2cPlayerMove
     * @instance
     */
    s2cPlayerMove.prototype.lineData = $util.emptyArray;

    /**
     * s2cPlayerMove propData.
     * @member {Array.<ImProp>} propData
     * @memberof s2cPlayerMove
     * @instance
     */
    s2cPlayerMove.prototype.propData = $util.emptyArray;

    /**
     * Creates a new s2cPlayerMove instance using the specified properties.
     * @function create
     * @memberof s2cPlayerMove
     * @static
     * @param {Is2cPlayerMove=} [properties] Properties to set
     * @returns {s2cPlayerMove} s2cPlayerMove instance
     */
    s2cPlayerMove.create = function create(properties) {
        return new s2cPlayerMove(properties);
    };

    /**
     * Encodes the specified s2cPlayerMove message. Does not implicitly {@link s2cPlayerMove.verify|verify} messages.
     * @function encode
     * @memberof s2cPlayerMove
     * @static
     * @param {Is2cPlayerMove} message s2cPlayerMove message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cPlayerMove.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        if (message.userData != null && message.userData.length)
            for (var i = 0; i < message.userData.length; ++i)
                $root.roomPlayerInfo.encode(message.userData[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
        if (message.lineData != null && message.lineData.length)
            for (var i = 0; i < message.lineData.length; ++i)
                $root.mLine.encode(message.lineData[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
        if (message.propData != null && message.propData.length)
            for (var i = 0; i < message.propData.length; ++i)
                $root.mProp.encode(message.propData[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
        return writer;
    };

    /**
     * Encodes the specified s2cPlayerMove message, length delimited. Does not implicitly {@link s2cPlayerMove.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cPlayerMove
     * @static
     * @param {Is2cPlayerMove} message s2cPlayerMove message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cPlayerMove.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cPlayerMove message from the specified reader or buffer.
     * @function decode
     * @memberof s2cPlayerMove
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cPlayerMove} s2cPlayerMove
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cPlayerMove.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cPlayerMove();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                if (!(message.userData && message.userData.length))
                    message.userData = [];
                message.userData.push($root.roomPlayerInfo.decode(reader, reader.uint32()));
                break;
            case 2:
                if (!(message.lineData && message.lineData.length))
                    message.lineData = [];
                message.lineData.push($root.mLine.decode(reader, reader.uint32()));
                break;
            case 3:
                if (!(message.propData && message.propData.length))
                    message.propData = [];
                message.propData.push($root.mProp.decode(reader, reader.uint32()));
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        return message;
    };

    /**
     * Decodes a s2cPlayerMove message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cPlayerMove
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cPlayerMove} s2cPlayerMove
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cPlayerMove.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cPlayerMove message.
     * @function verify
     * @memberof s2cPlayerMove
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cPlayerMove.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (message.userData != null && message.hasOwnProperty("userData")) {
            if (!Array.isArray(message.userData))
                return "userData: array expected";
            for (var i = 0; i < message.userData.length; ++i) {
                var error = $root.roomPlayerInfo.verify(message.userData[i]);
                if (error)
                    return "userData." + error;
            }
        }
        if (message.lineData != null && message.hasOwnProperty("lineData")) {
            if (!Array.isArray(message.lineData))
                return "lineData: array expected";
            for (var i = 0; i < message.lineData.length; ++i) {
                var error = $root.mLine.verify(message.lineData[i]);
                if (error)
                    return "lineData." + error;
            }
        }
        if (message.propData != null && message.hasOwnProperty("propData")) {
            if (!Array.isArray(message.propData))
                return "propData: array expected";
            for (var i = 0; i < message.propData.length; ++i) {
                var error = $root.mProp.verify(message.propData[i]);
                if (error)
                    return "propData." + error;
            }
        }
        return null;
    };

    /**
     * Creates a s2cPlayerMove message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cPlayerMove
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cPlayerMove} s2cPlayerMove
     */
    s2cPlayerMove.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cPlayerMove)
            return object;
        var message = new $root.s2cPlayerMove();
        if (object.userData) {
            if (!Array.isArray(object.userData))
                throw TypeError(".s2cPlayerMove.userData: array expected");
            message.userData = [];
            for (var i = 0; i < object.userData.length; ++i) {
                if (typeof object.userData[i] !== "object")
                    throw TypeError(".s2cPlayerMove.userData: object expected");
                message.userData[i] = $root.roomPlayerInfo.fromObject(object.userData[i]);
            }
        }
        if (object.lineData) {
            if (!Array.isArray(object.lineData))
                throw TypeError(".s2cPlayerMove.lineData: array expected");
            message.lineData = [];
            for (var i = 0; i < object.lineData.length; ++i) {
                if (typeof object.lineData[i] !== "object")
                    throw TypeError(".s2cPlayerMove.lineData: object expected");
                message.lineData[i] = $root.mLine.fromObject(object.lineData[i]);
            }
        }
        if (object.propData) {
            if (!Array.isArray(object.propData))
                throw TypeError(".s2cPlayerMove.propData: array expected");
            message.propData = [];
            for (var i = 0; i < object.propData.length; ++i) {
                if (typeof object.propData[i] !== "object")
                    throw TypeError(".s2cPlayerMove.propData: object expected");
                message.propData[i] = $root.mProp.fromObject(object.propData[i]);
            }
        }
        return message;
    };

    /**
     * Creates a plain object from a s2cPlayerMove message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cPlayerMove
     * @static
     * @param {s2cPlayerMove} message s2cPlayerMove
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cPlayerMove.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.arrays || options.defaults) {
            object.userData = [];
            object.lineData = [];
            object.propData = [];
        }
        if (message.userData && message.userData.length) {
            object.userData = [];
            for (var j = 0; j < message.userData.length; ++j)
                object.userData[j] = $root.roomPlayerInfo.toObject(message.userData[j], options);
        }
        if (message.lineData && message.lineData.length) {
            object.lineData = [];
            for (var j = 0; j < message.lineData.length; ++j)
                object.lineData[j] = $root.mLine.toObject(message.lineData[j], options);
        }
        if (message.propData && message.propData.length) {
            object.propData = [];
            for (var j = 0; j < message.propData.length; ++j)
                object.propData[j] = $root.mProp.toObject(message.propData[j], options);
        }
        return object;
    };

    /**
     * Converts this s2cPlayerMove to JSON.
     * @function toJSON
     * @memberof s2cPlayerMove
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cPlayerMove.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cPlayerMove;
})();

$root.c2sChangtype = (function() {

    /**
     * Properties of a c2sChangtype.
     * @exports Ic2sChangtype
     * @interface Ic2sChangtype
     * @property {number} account c2sChangtype account
     * @property {string} sign c2sChangtype sign
     */

    /**
     * Constructs a new c2sChangtype.
     * @exports c2sChangtype
     * @classdesc Represents a c2sChangtype.
     * @implements Ic2sChangtype
     * @constructor
     * @param {Ic2sChangtype=} [properties] Properties to set
     */
    function c2sChangtype(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sChangtype account.
     * @member {number} account
     * @memberof c2sChangtype
     * @instance
     */
    c2sChangtype.prototype.account = 0;

    /**
     * c2sChangtype sign.
     * @member {string} sign
     * @memberof c2sChangtype
     * @instance
     */
    c2sChangtype.prototype.sign = "";

    /**
     * Creates a new c2sChangtype instance using the specified properties.
     * @function create
     * @memberof c2sChangtype
     * @static
     * @param {Ic2sChangtype=} [properties] Properties to set
     * @returns {c2sChangtype} c2sChangtype instance
     */
    c2sChangtype.create = function create(properties) {
        return new c2sChangtype(properties);
    };

    /**
     * Encodes the specified c2sChangtype message. Does not implicitly {@link c2sChangtype.verify|verify} messages.
     * @function encode
     * @memberof c2sChangtype
     * @static
     * @param {Ic2sChangtype} message c2sChangtype message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sChangtype.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.account);
        writer.uint32(/* id 2, wireType 2 =*/18).string(message.sign);
        return writer;
    };

    /**
     * Encodes the specified c2sChangtype message, length delimited. Does not implicitly {@link c2sChangtype.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sChangtype
     * @static
     * @param {Ic2sChangtype} message c2sChangtype message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sChangtype.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sChangtype message from the specified reader or buffer.
     * @function decode
     * @memberof c2sChangtype
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sChangtype} c2sChangtype
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sChangtype.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sChangtype();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.account = reader.int32();
                break;
            case 2:
                message.sign = reader.string();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("account"))
            throw $util.ProtocolError("missing required 'account'", { instance: message });
        if (!message.hasOwnProperty("sign"))
            throw $util.ProtocolError("missing required 'sign'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sChangtype message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sChangtype
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sChangtype} c2sChangtype
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sChangtype.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sChangtype message.
     * @function verify
     * @memberof c2sChangtype
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sChangtype.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.account))
            return "account: integer expected";
        if (!$util.isString(message.sign))
            return "sign: string expected";
        return null;
    };

    /**
     * Creates a c2sChangtype message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sChangtype
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sChangtype} c2sChangtype
     */
    c2sChangtype.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sChangtype)
            return object;
        var message = new $root.c2sChangtype();
        if (object.account != null)
            message.account = object.account | 0;
        if (object.sign != null)
            message.sign = String(object.sign);
        return message;
    };

    /**
     * Creates a plain object from a c2sChangtype message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sChangtype
     * @static
     * @param {c2sChangtype} message c2sChangtype
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sChangtype.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.account = 0;
            object.sign = "";
        }
        if (message.account != null && message.hasOwnProperty("account"))
            object.account = message.account;
        if (message.sign != null && message.hasOwnProperty("sign"))
            object.sign = message.sign;
        return object;
    };

    /**
     * Converts this c2sChangtype to JSON.
     * @function toJSON
     * @memberof c2sChangtype
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sChangtype.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sChangtype;
})();

$root.c2sBackToHall = (function() {

    /**
     * Properties of a c2sBackToHall.
     * @exports Ic2sBackToHall
     * @interface Ic2sBackToHall
     * @property {number} account c2sBackToHall account
     * @property {string} sign c2sBackToHall sign
     */

    /**
     * Constructs a new c2sBackToHall.
     * @exports c2sBackToHall
     * @classdesc Represents a c2sBackToHall.
     * @implements Ic2sBackToHall
     * @constructor
     * @param {Ic2sBackToHall=} [properties] Properties to set
     */
    function c2sBackToHall(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sBackToHall account.
     * @member {number} account
     * @memberof c2sBackToHall
     * @instance
     */
    c2sBackToHall.prototype.account = 0;

    /**
     * c2sBackToHall sign.
     * @member {string} sign
     * @memberof c2sBackToHall
     * @instance
     */
    c2sBackToHall.prototype.sign = "";

    /**
     * Creates a new c2sBackToHall instance using the specified properties.
     * @function create
     * @memberof c2sBackToHall
     * @static
     * @param {Ic2sBackToHall=} [properties] Properties to set
     * @returns {c2sBackToHall} c2sBackToHall instance
     */
    c2sBackToHall.create = function create(properties) {
        return new c2sBackToHall(properties);
    };

    /**
     * Encodes the specified c2sBackToHall message. Does not implicitly {@link c2sBackToHall.verify|verify} messages.
     * @function encode
     * @memberof c2sBackToHall
     * @static
     * @param {Ic2sBackToHall} message c2sBackToHall message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sBackToHall.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.account);
        writer.uint32(/* id 2, wireType 2 =*/18).string(message.sign);
        return writer;
    };

    /**
     * Encodes the specified c2sBackToHall message, length delimited. Does not implicitly {@link c2sBackToHall.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sBackToHall
     * @static
     * @param {Ic2sBackToHall} message c2sBackToHall message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sBackToHall.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sBackToHall message from the specified reader or buffer.
     * @function decode
     * @memberof c2sBackToHall
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sBackToHall} c2sBackToHall
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sBackToHall.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sBackToHall();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.account = reader.int32();
                break;
            case 2:
                message.sign = reader.string();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("account"))
            throw $util.ProtocolError("missing required 'account'", { instance: message });
        if (!message.hasOwnProperty("sign"))
            throw $util.ProtocolError("missing required 'sign'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sBackToHall message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sBackToHall
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sBackToHall} c2sBackToHall
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sBackToHall.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sBackToHall message.
     * @function verify
     * @memberof c2sBackToHall
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sBackToHall.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.account))
            return "account: integer expected";
        if (!$util.isString(message.sign))
            return "sign: string expected";
        return null;
    };

    /**
     * Creates a c2sBackToHall message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sBackToHall
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sBackToHall} c2sBackToHall
     */
    c2sBackToHall.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sBackToHall)
            return object;
        var message = new $root.c2sBackToHall();
        if (object.account != null)
            message.account = object.account | 0;
        if (object.sign != null)
            message.sign = String(object.sign);
        return message;
    };

    /**
     * Creates a plain object from a c2sBackToHall message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sBackToHall
     * @static
     * @param {c2sBackToHall} message c2sBackToHall
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sBackToHall.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.account = 0;
            object.sign = "";
        }
        if (message.account != null && message.hasOwnProperty("account"))
            object.account = message.account;
        if (message.sign != null && message.hasOwnProperty("sign"))
            object.sign = message.sign;
        return object;
    };

    /**
     * Converts this c2sBackToHall to JSON.
     * @function toJSON
     * @memberof c2sBackToHall
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sBackToHall.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sBackToHall;
})();

$root.c2sRespawn = (function() {

    /**
     * Properties of a c2sRespawn.
     * @exports Ic2sRespawn
     * @interface Ic2sRespawn
     * @property {number} account c2sRespawn account
     * @property {string} sign c2sRespawn sign
     * @property {number} roomId c2sRespawn roomId
     */

    /**
     * Constructs a new c2sRespawn.
     * @exports c2sRespawn
     * @classdesc Represents a c2sRespawn.
     * @implements Ic2sRespawn
     * @constructor
     * @param {Ic2sRespawn=} [properties] Properties to set
     */
    function c2sRespawn(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * c2sRespawn account.
     * @member {number} account
     * @memberof c2sRespawn
     * @instance
     */
    c2sRespawn.prototype.account = 0;

    /**
     * c2sRespawn sign.
     * @member {string} sign
     * @memberof c2sRespawn
     * @instance
     */
    c2sRespawn.prototype.sign = "";

    /**
     * c2sRespawn roomId.
     * @member {number} roomId
     * @memberof c2sRespawn
     * @instance
     */
    c2sRespawn.prototype.roomId = 0;

    /**
     * Creates a new c2sRespawn instance using the specified properties.
     * @function create
     * @memberof c2sRespawn
     * @static
     * @param {Ic2sRespawn=} [properties] Properties to set
     * @returns {c2sRespawn} c2sRespawn instance
     */
    c2sRespawn.create = function create(properties) {
        return new c2sRespawn(properties);
    };

    /**
     * Encodes the specified c2sRespawn message. Does not implicitly {@link c2sRespawn.verify|verify} messages.
     * @function encode
     * @memberof c2sRespawn
     * @static
     * @param {Ic2sRespawn} message c2sRespawn message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sRespawn.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.account);
        writer.uint32(/* id 2, wireType 2 =*/18).string(message.sign);
        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.roomId);
        return writer;
    };

    /**
     * Encodes the specified c2sRespawn message, length delimited. Does not implicitly {@link c2sRespawn.verify|verify} messages.
     * @function encodeDelimited
     * @memberof c2sRespawn
     * @static
     * @param {Ic2sRespawn} message c2sRespawn message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    c2sRespawn.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a c2sRespawn message from the specified reader or buffer.
     * @function decode
     * @memberof c2sRespawn
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {c2sRespawn} c2sRespawn
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sRespawn.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.c2sRespawn();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.account = reader.int32();
                break;
            case 2:
                message.sign = reader.string();
                break;
            case 3:
                message.roomId = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("account"))
            throw $util.ProtocolError("missing required 'account'", { instance: message });
        if (!message.hasOwnProperty("sign"))
            throw $util.ProtocolError("missing required 'sign'", { instance: message });
        if (!message.hasOwnProperty("roomId"))
            throw $util.ProtocolError("missing required 'roomId'", { instance: message });
        return message;
    };

    /**
     * Decodes a c2sRespawn message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof c2sRespawn
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {c2sRespawn} c2sRespawn
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    c2sRespawn.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a c2sRespawn message.
     * @function verify
     * @memberof c2sRespawn
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    c2sRespawn.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.account))
            return "account: integer expected";
        if (!$util.isString(message.sign))
            return "sign: string expected";
        if (!$util.isInteger(message.roomId))
            return "roomId: integer expected";
        return null;
    };

    /**
     * Creates a c2sRespawn message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof c2sRespawn
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {c2sRespawn} c2sRespawn
     */
    c2sRespawn.fromObject = function fromObject(object) {
        if (object instanceof $root.c2sRespawn)
            return object;
        var message = new $root.c2sRespawn();
        if (object.account != null)
            message.account = object.account | 0;
        if (object.sign != null)
            message.sign = String(object.sign);
        if (object.roomId != null)
            message.roomId = object.roomId | 0;
        return message;
    };

    /**
     * Creates a plain object from a c2sRespawn message. Also converts values to other types if specified.
     * @function toObject
     * @memberof c2sRespawn
     * @static
     * @param {c2sRespawn} message c2sRespawn
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    c2sRespawn.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.account = 0;
            object.sign = "";
            object.roomId = 0;
        }
        if (message.account != null && message.hasOwnProperty("account"))
            object.account = message.account;
        if (message.sign != null && message.hasOwnProperty("sign"))
            object.sign = message.sign;
        if (message.roomId != null && message.hasOwnProperty("roomId"))
            object.roomId = message.roomId;
        return object;
    };

    /**
     * Converts this c2sRespawn to JSON.
     * @function toJSON
     * @memberof c2sRespawn
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    c2sRespawn.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return c2sRespawn;
})();

$root.s2cRespawn = (function() {

    /**
     * Properties of a s2cRespawn.
     * @exports Is2cRespawn
     * @interface Is2cRespawn
     * @property {number|Long} startRoomTime s2cRespawn startRoomTime
     */

    /**
     * Constructs a new s2cRespawn.
     * @exports s2cRespawn
     * @classdesc Represents a s2cRespawn.
     * @implements Is2cRespawn
     * @constructor
     * @param {Is2cRespawn=} [properties] Properties to set
     */
    function s2cRespawn(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cRespawn startRoomTime.
     * @member {number|Long} startRoomTime
     * @memberof s2cRespawn
     * @instance
     */
    s2cRespawn.prototype.startRoomTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

    /**
     * Creates a new s2cRespawn instance using the specified properties.
     * @function create
     * @memberof s2cRespawn
     * @static
     * @param {Is2cRespawn=} [properties] Properties to set
     * @returns {s2cRespawn} s2cRespawn instance
     */
    s2cRespawn.create = function create(properties) {
        return new s2cRespawn(properties);
    };

    /**
     * Encodes the specified s2cRespawn message. Does not implicitly {@link s2cRespawn.verify|verify} messages.
     * @function encode
     * @memberof s2cRespawn
     * @static
     * @param {Is2cRespawn} message s2cRespawn message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cRespawn.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.startRoomTime);
        return writer;
    };

    /**
     * Encodes the specified s2cRespawn message, length delimited. Does not implicitly {@link s2cRespawn.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cRespawn
     * @static
     * @param {Is2cRespawn} message s2cRespawn message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cRespawn.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cRespawn message from the specified reader or buffer.
     * @function decode
     * @memberof s2cRespawn
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cRespawn} s2cRespawn
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cRespawn.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cRespawn();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.startRoomTime = reader.int64();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("startRoomTime"))
            throw $util.ProtocolError("missing required 'startRoomTime'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cRespawn message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cRespawn
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cRespawn} s2cRespawn
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cRespawn.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cRespawn message.
     * @function verify
     * @memberof s2cRespawn
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cRespawn.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.startRoomTime) && !(message.startRoomTime && $util.isInteger(message.startRoomTime.low) && $util.isInteger(message.startRoomTime.high)))
            return "startRoomTime: integer|Long expected";
        return null;
    };

    /**
     * Creates a s2cRespawn message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cRespawn
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cRespawn} s2cRespawn
     */
    s2cRespawn.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cRespawn)
            return object;
        var message = new $root.s2cRespawn();
        if (object.startRoomTime != null)
            if ($util.Long)
                (message.startRoomTime = $util.Long.fromValue(object.startRoomTime)).unsigned = false;
            else if (typeof object.startRoomTime === "string")
                message.startRoomTime = parseInt(object.startRoomTime, 10);
            else if (typeof object.startRoomTime === "number")
                message.startRoomTime = object.startRoomTime;
            else if (typeof object.startRoomTime === "object")
                message.startRoomTime = new $util.LongBits(object.startRoomTime.low >>> 0, object.startRoomTime.high >>> 0).toNumber();
        return message;
    };

    /**
     * Creates a plain object from a s2cRespawn message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cRespawn
     * @static
     * @param {s2cRespawn} message s2cRespawn
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cRespawn.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults)
            if ($util.Long) {
                var long = new $util.Long(0, 0, false);
                object.startRoomTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
            } else
                object.startRoomTime = options.longs === String ? "0" : 0;
        if (message.startRoomTime != null && message.hasOwnProperty("startRoomTime"))
            if (typeof message.startRoomTime === "number")
                object.startRoomTime = options.longs === String ? String(message.startRoomTime) : message.startRoomTime;
            else
                object.startRoomTime = options.longs === String ? $util.Long.prototype.toString.call(message.startRoomTime) : options.longs === Number ? new $util.LongBits(message.startRoomTime.low >>> 0, message.startRoomTime.high >>> 0).toNumber() : message.startRoomTime;
        return object;
    };

    /**
     * Converts this s2cRespawn to JSON.
     * @function toJSON
     * @memberof s2cRespawn
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cRespawn.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cRespawn;
})();

$root.s2cTopList = (function() {

    /**
     * Properties of a s2cTopList.
     * @exports Is2cTopList
     * @interface Is2cTopList
     * @property {Array.<ItopUsrItem>|null} [tops] s2cTopList tops
     * @property {ItopUsrItem} min s2cTopList min
     */

    /**
     * Constructs a new s2cTopList.
     * @exports s2cTopList
     * @classdesc Represents a s2cTopList.
     * @implements Is2cTopList
     * @constructor
     * @param {Is2cTopList=} [properties] Properties to set
     */
    function s2cTopList(properties) {
        this.tops = [];
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * s2cTopList tops.
     * @member {Array.<ItopUsrItem>} tops
     * @memberof s2cTopList
     * @instance
     */
    s2cTopList.prototype.tops = $util.emptyArray;

    /**
     * s2cTopList min.
     * @member {ItopUsrItem} min
     * @memberof s2cTopList
     * @instance
     */
    s2cTopList.prototype.min = null;

    /**
     * Creates a new s2cTopList instance using the specified properties.
     * @function create
     * @memberof s2cTopList
     * @static
     * @param {Is2cTopList=} [properties] Properties to set
     * @returns {s2cTopList} s2cTopList instance
     */
    s2cTopList.create = function create(properties) {
        return new s2cTopList(properties);
    };

    /**
     * Encodes the specified s2cTopList message. Does not implicitly {@link s2cTopList.verify|verify} messages.
     * @function encode
     * @memberof s2cTopList
     * @static
     * @param {Is2cTopList} message s2cTopList message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cTopList.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        if (message.tops != null && message.tops.length)
            for (var i = 0; i < message.tops.length; ++i)
                $root.topUsrItem.encode(message.tops[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
        $root.topUsrItem.encode(message.min, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
        return writer;
    };

    /**
     * Encodes the specified s2cTopList message, length delimited. Does not implicitly {@link s2cTopList.verify|verify} messages.
     * @function encodeDelimited
     * @memberof s2cTopList
     * @static
     * @param {Is2cTopList} message s2cTopList message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    s2cTopList.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a s2cTopList message from the specified reader or buffer.
     * @function decode
     * @memberof s2cTopList
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {s2cTopList} s2cTopList
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cTopList.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.s2cTopList();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                if (!(message.tops && message.tops.length))
                    message.tops = [];
                message.tops.push($root.topUsrItem.decode(reader, reader.uint32()));
                break;
            case 2:
                message.min = $root.topUsrItem.decode(reader, reader.uint32());
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("min"))
            throw $util.ProtocolError("missing required 'min'", { instance: message });
        return message;
    };

    /**
     * Decodes a s2cTopList message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof s2cTopList
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {s2cTopList} s2cTopList
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    s2cTopList.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a s2cTopList message.
     * @function verify
     * @memberof s2cTopList
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    s2cTopList.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (message.tops != null && message.hasOwnProperty("tops")) {
            if (!Array.isArray(message.tops))
                return "tops: array expected";
            for (var i = 0; i < message.tops.length; ++i) {
                var error = $root.topUsrItem.verify(message.tops[i]);
                if (error)
                    return "tops." + error;
            }
        }
        {
            var error = $root.topUsrItem.verify(message.min);
            if (error)
                return "min." + error;
        }
        return null;
    };

    /**
     * Creates a s2cTopList message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof s2cTopList
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {s2cTopList} s2cTopList
     */
    s2cTopList.fromObject = function fromObject(object) {
        if (object instanceof $root.s2cTopList)
            return object;
        var message = new $root.s2cTopList();
        if (object.tops) {
            if (!Array.isArray(object.tops))
                throw TypeError(".s2cTopList.tops: array expected");
            message.tops = [];
            for (var i = 0; i < object.tops.length; ++i) {
                if (typeof object.tops[i] !== "object")
                    throw TypeError(".s2cTopList.tops: object expected");
                message.tops[i] = $root.topUsrItem.fromObject(object.tops[i]);
            }
        }
        if (object.min != null) {
            if (typeof object.min !== "object")
                throw TypeError(".s2cTopList.min: object expected");
            message.min = $root.topUsrItem.fromObject(object.min);
        }
        return message;
    };

    /**
     * Creates a plain object from a s2cTopList message. Also converts values to other types if specified.
     * @function toObject
     * @memberof s2cTopList
     * @static
     * @param {s2cTopList} message s2cTopList
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    s2cTopList.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.arrays || options.defaults)
            object.tops = [];
        if (options.defaults)
            object.min = null;
        if (message.tops && message.tops.length) {
            object.tops = [];
            for (var j = 0; j < message.tops.length; ++j)
                object.tops[j] = $root.topUsrItem.toObject(message.tops[j], options);
        }
        if (message.min != null && message.hasOwnProperty("min"))
            object.min = $root.topUsrItem.toObject(message.min, options);
        return object;
    };

    /**
     * Converts this s2cTopList to JSON.
     * @function toJSON
     * @memberof s2cTopList
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    s2cTopList.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return s2cTopList;
})();

$root.topUsrItem = (function() {

    /**
     * Properties of a topUsrItem.
     * @exports ItopUsrItem
     * @interface ItopUsrItem
     * @property {string} name topUsrItem name
     * @property {number} tongueLength topUsrItem tongueLength
     */

    /**
     * Constructs a new topUsrItem.
     * @exports topUsrItem
     * @classdesc Represents a topUsrItem.
     * @implements ItopUsrItem
     * @constructor
     * @param {ItopUsrItem=} [properties] Properties to set
     */
    function topUsrItem(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * topUsrItem name.
     * @member {string} name
     * @memberof topUsrItem
     * @instance
     */
    topUsrItem.prototype.name = "";

    /**
     * topUsrItem tongueLength.
     * @member {number} tongueLength
     * @memberof topUsrItem
     * @instance
     */
    topUsrItem.prototype.tongueLength = 0;

    /**
     * Creates a new topUsrItem instance using the specified properties.
     * @function create
     * @memberof topUsrItem
     * @static
     * @param {ItopUsrItem=} [properties] Properties to set
     * @returns {topUsrItem} topUsrItem instance
     */
    topUsrItem.create = function create(properties) {
        return new topUsrItem(properties);
    };

    /**
     * Encodes the specified topUsrItem message. Does not implicitly {@link topUsrItem.verify|verify} messages.
     * @function encode
     * @memberof topUsrItem
     * @static
     * @param {ItopUsrItem} message topUsrItem message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    topUsrItem.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.tongueLength);
        return writer;
    };

    /**
     * Encodes the specified topUsrItem message, length delimited. Does not implicitly {@link topUsrItem.verify|verify} messages.
     * @function encodeDelimited
     * @memberof topUsrItem
     * @static
     * @param {ItopUsrItem} message topUsrItem message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    topUsrItem.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a topUsrItem message from the specified reader or buffer.
     * @function decode
     * @memberof topUsrItem
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {topUsrItem} topUsrItem
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    topUsrItem.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.topUsrItem();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.name = reader.string();
                break;
            case 2:
                message.tongueLength = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("name"))
            throw $util.ProtocolError("missing required 'name'", { instance: message });
        if (!message.hasOwnProperty("tongueLength"))
            throw $util.ProtocolError("missing required 'tongueLength'", { instance: message });
        return message;
    };

    /**
     * Decodes a topUsrItem message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof topUsrItem
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {topUsrItem} topUsrItem
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    topUsrItem.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a topUsrItem message.
     * @function verify
     * @memberof topUsrItem
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    topUsrItem.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isString(message.name))
            return "name: string expected";
        if (!$util.isInteger(message.tongueLength))
            return "tongueLength: integer expected";
        return null;
    };

    /**
     * Creates a topUsrItem message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof topUsrItem
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {topUsrItem} topUsrItem
     */
    topUsrItem.fromObject = function fromObject(object) {
        if (object instanceof $root.topUsrItem)
            return object;
        var message = new $root.topUsrItem();
        if (object.name != null)
            message.name = String(object.name);
        if (object.tongueLength != null)
            message.tongueLength = object.tongueLength | 0;
        return message;
    };

    /**
     * Creates a plain object from a topUsrItem message. Also converts values to other types if specified.
     * @function toObject
     * @memberof topUsrItem
     * @static
     * @param {topUsrItem} message topUsrItem
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    topUsrItem.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.name = "";
            object.tongueLength = 0;
        }
        if (message.name != null && message.hasOwnProperty("name"))
            object.name = message.name;
        if (message.tongueLength != null && message.hasOwnProperty("tongueLength"))
            object.tongueLength = message.tongueLength;
        return object;
    };

    /**
     * Converts this topUsrItem to JSON.
     * @function toJSON
     * @memberof topUsrItem
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    topUsrItem.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return topUsrItem;
})();

$root.roomPlayerInfo = (function() {

    /**
     * Properties of a roomPlayerInfo.
     * @exports IroomPlayerInfo
     * @interface IroomPlayerInfo
     * @property {string} name roomPlayerInfo name
     * @property {number} userId roomPlayerInfo userId
     * @property {number} x roomPlayerInfo x
     * @property {number} y roomPlayerInfo y
     * @property {number} frogType roomPlayerInfo frogType
     * @property {number} level roomPlayerInfo level
     * @property {number} lineLength roomPlayerInfo lineLength
     * @property {number} roomId roomPlayerInfo roomId
     * @property {boolean} ishadLine roomPlayerInfo ishadLine
     * @property {ImPropStates} propStates roomPlayerInfo propStates
     * @property {ImDeath} Death roomPlayerInfo Death
     * @property {ImNewHandProtect} NewHandProtect roomPlayerInfo NewHandProtect
     * @property {ImDressup} Dressup roomPlayerInfo Dressup
     */

    /**
     * Constructs a new roomPlayerInfo.
     * @exports roomPlayerInfo
     * @classdesc Represents a roomPlayerInfo.
     * @implements IroomPlayerInfo
     * @constructor
     * @param {IroomPlayerInfo=} [properties] Properties to set
     */
    function roomPlayerInfo(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * roomPlayerInfo name.
     * @member {string} name
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.name = "";

    /**
     * roomPlayerInfo userId.
     * @member {number} userId
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.userId = 0;

    /**
     * roomPlayerInfo x.
     * @member {number} x
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.x = 0;

    /**
     * roomPlayerInfo y.
     * @member {number} y
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.y = 0;

    /**
     * roomPlayerInfo frogType.
     * @member {number} frogType
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.frogType = 0;

    /**
     * roomPlayerInfo level.
     * @member {number} level
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.level = 0;

    /**
     * roomPlayerInfo lineLength.
     * @member {number} lineLength
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.lineLength = 0;

    /**
     * roomPlayerInfo roomId.
     * @member {number} roomId
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.roomId = 0;

    /**
     * roomPlayerInfo ishadLine.
     * @member {boolean} ishadLine
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.ishadLine = false;

    /**
     * roomPlayerInfo propStates.
     * @member {ImPropStates} propStates
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.propStates = null;

    /**
     * roomPlayerInfo Death.
     * @member {ImDeath} Death
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.Death = null;

    /**
     * roomPlayerInfo NewHandProtect.
     * @member {ImNewHandProtect} NewHandProtect
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.NewHandProtect = null;

    /**
     * roomPlayerInfo Dressup.
     * @member {ImDressup} Dressup
     * @memberof roomPlayerInfo
     * @instance
     */
    roomPlayerInfo.prototype.Dressup = null;

    /**
     * Creates a new roomPlayerInfo instance using the specified properties.
     * @function create
     * @memberof roomPlayerInfo
     * @static
     * @param {IroomPlayerInfo=} [properties] Properties to set
     * @returns {roomPlayerInfo} roomPlayerInfo instance
     */
    roomPlayerInfo.create = function create(properties) {
        return new roomPlayerInfo(properties);
    };

    /**
     * Encodes the specified roomPlayerInfo message. Does not implicitly {@link roomPlayerInfo.verify|verify} messages.
     * @function encode
     * @memberof roomPlayerInfo
     * @static
     * @param {IroomPlayerInfo} message roomPlayerInfo message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    roomPlayerInfo.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.userId);
        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.x);
        writer.uint32(/* id 4, wireType 0 =*/32).int32(message.y);
        writer.uint32(/* id 5, wireType 0 =*/40).int32(message.frogType);
        writer.uint32(/* id 6, wireType 0 =*/48).int32(message.level);
        writer.uint32(/* id 7, wireType 0 =*/56).int32(message.lineLength);
        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.roomId);
        writer.uint32(/* id 9, wireType 0 =*/72).bool(message.ishadLine);
        $root.mPropStates.encode(message.propStates, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim();
        $root.mDeath.encode(message.Death, writer.uint32(/* id 11, wireType 2 =*/90).fork()).ldelim();
        $root.mNewHandProtect.encode(message.NewHandProtect, writer.uint32(/* id 12, wireType 2 =*/98).fork()).ldelim();
        $root.mDressup.encode(message.Dressup, writer.uint32(/* id 13, wireType 2 =*/106).fork()).ldelim();
        return writer;
    };

    /**
     * Encodes the specified roomPlayerInfo message, length delimited. Does not implicitly {@link roomPlayerInfo.verify|verify} messages.
     * @function encodeDelimited
     * @memberof roomPlayerInfo
     * @static
     * @param {IroomPlayerInfo} message roomPlayerInfo message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    roomPlayerInfo.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a roomPlayerInfo message from the specified reader or buffer.
     * @function decode
     * @memberof roomPlayerInfo
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {roomPlayerInfo} roomPlayerInfo
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    roomPlayerInfo.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.roomPlayerInfo();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.name = reader.string();
                break;
            case 2:
                message.userId = reader.int32();
                break;
            case 3:
                message.x = reader.int32();
                break;
            case 4:
                message.y = reader.int32();
                break;
            case 5:
                message.frogType = reader.int32();
                break;
            case 6:
                message.level = reader.int32();
                break;
            case 7:
                message.lineLength = reader.int32();
                break;
            case 8:
                message.roomId = reader.int32();
                break;
            case 9:
                message.ishadLine = reader.bool();
                break;
            case 10:
                message.propStates = $root.mPropStates.decode(reader, reader.uint32());
                break;
            case 11:
                message.Death = $root.mDeath.decode(reader, reader.uint32());
                break;
            case 12:
                message.NewHandProtect = $root.mNewHandProtect.decode(reader, reader.uint32());
                break;
            case 13:
                message.Dressup = $root.mDressup.decode(reader, reader.uint32());
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("name"))
            throw $util.ProtocolError("missing required 'name'", { instance: message });
        if (!message.hasOwnProperty("userId"))
            throw $util.ProtocolError("missing required 'userId'", { instance: message });
        if (!message.hasOwnProperty("x"))
            throw $util.ProtocolError("missing required 'x'", { instance: message });
        if (!message.hasOwnProperty("y"))
            throw $util.ProtocolError("missing required 'y'", { instance: message });
        if (!message.hasOwnProperty("frogType"))
            throw $util.ProtocolError("missing required 'frogType'", { instance: message });
        if (!message.hasOwnProperty("level"))
            throw $util.ProtocolError("missing required 'level'", { instance: message });
        if (!message.hasOwnProperty("lineLength"))
            throw $util.ProtocolError("missing required 'lineLength'", { instance: message });
        if (!message.hasOwnProperty("roomId"))
            throw $util.ProtocolError("missing required 'roomId'", { instance: message });
        if (!message.hasOwnProperty("ishadLine"))
            throw $util.ProtocolError("missing required 'ishadLine'", { instance: message });
        if (!message.hasOwnProperty("propStates"))
            throw $util.ProtocolError("missing required 'propStates'", { instance: message });
        if (!message.hasOwnProperty("Death"))
            throw $util.ProtocolError("missing required 'Death'", { instance: message });
        if (!message.hasOwnProperty("NewHandProtect"))
            throw $util.ProtocolError("missing required 'NewHandProtect'", { instance: message });
        if (!message.hasOwnProperty("Dressup"))
            throw $util.ProtocolError("missing required 'Dressup'", { instance: message });
        return message;
    };

    /**
     * Decodes a roomPlayerInfo message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof roomPlayerInfo
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {roomPlayerInfo} roomPlayerInfo
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    roomPlayerInfo.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a roomPlayerInfo message.
     * @function verify
     * @memberof roomPlayerInfo
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    roomPlayerInfo.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isString(message.name))
            return "name: string expected";
        if (!$util.isInteger(message.userId))
            return "userId: integer expected";
        if (!$util.isInteger(message.x))
            return "x: integer expected";
        if (!$util.isInteger(message.y))
            return "y: integer expected";
        if (!$util.isInteger(message.frogType))
            return "frogType: integer expected";
        if (!$util.isInteger(message.level))
            return "level: integer expected";
        if (!$util.isInteger(message.lineLength))
            return "lineLength: integer expected";
        if (!$util.isInteger(message.roomId))
            return "roomId: integer expected";
        if (typeof message.ishadLine !== "boolean")
            return "ishadLine: boolean expected";
        {
            var error = $root.mPropStates.verify(message.propStates);
            if (error)
                return "propStates." + error;
        }
        {
            var error = $root.mDeath.verify(message.Death);
            if (error)
                return "Death." + error;
        }
        {
            var error = $root.mNewHandProtect.verify(message.NewHandProtect);
            if (error)
                return "NewHandProtect." + error;
        }
        {
            var error = $root.mDressup.verify(message.Dressup);
            if (error)
                return "Dressup." + error;
        }
        return null;
    };

    /**
     * Creates a roomPlayerInfo message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof roomPlayerInfo
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {roomPlayerInfo} roomPlayerInfo
     */
    roomPlayerInfo.fromObject = function fromObject(object) {
        if (object instanceof $root.roomPlayerInfo)
            return object;
        var message = new $root.roomPlayerInfo();
        if (object.name != null)
            message.name = String(object.name);
        if (object.userId != null)
            message.userId = object.userId | 0;
        if (object.x != null)
            message.x = object.x | 0;
        if (object.y != null)
            message.y = object.y | 0;
        if (object.frogType != null)
            message.frogType = object.frogType | 0;
        if (object.level != null)
            message.level = object.level | 0;
        if (object.lineLength != null)
            message.lineLength = object.lineLength | 0;
        if (object.roomId != null)
            message.roomId = object.roomId | 0;
        if (object.ishadLine != null)
            message.ishadLine = Boolean(object.ishadLine);
        if (object.propStates != null) {
            if (typeof object.propStates !== "object")
                throw TypeError(".roomPlayerInfo.propStates: object expected");
            message.propStates = $root.mPropStates.fromObject(object.propStates);
        }
        if (object.Death != null) {
            if (typeof object.Death !== "object")
                throw TypeError(".roomPlayerInfo.Death: object expected");
            message.Death = $root.mDeath.fromObject(object.Death);
        }
        if (object.NewHandProtect != null) {
            if (typeof object.NewHandProtect !== "object")
                throw TypeError(".roomPlayerInfo.NewHandProtect: object expected");
            message.NewHandProtect = $root.mNewHandProtect.fromObject(object.NewHandProtect);
        }
        if (object.Dressup != null) {
            if (typeof object.Dressup !== "object")
                throw TypeError(".roomPlayerInfo.Dressup: object expected");
            message.Dressup = $root.mDressup.fromObject(object.Dressup);
        }
        return message;
    };

    /**
     * Creates a plain object from a roomPlayerInfo message. Also converts values to other types if specified.
     * @function toObject
     * @memberof roomPlayerInfo
     * @static
     * @param {roomPlayerInfo} message roomPlayerInfo
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    roomPlayerInfo.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.name = "";
            object.userId = 0;
            object.x = 0;
            object.y = 0;
            object.frogType = 0;
            object.level = 0;
            object.lineLength = 0;
            object.roomId = 0;
            object.ishadLine = false;
            object.propStates = null;
            object.Death = null;
            object.NewHandProtect = null;
            object.Dressup = null;
        }
        if (message.name != null && message.hasOwnProperty("name"))
            object.name = message.name;
        if (message.userId != null && message.hasOwnProperty("userId"))
            object.userId = message.userId;
        if (message.x != null && message.hasOwnProperty("x"))
            object.x = message.x;
        if (message.y != null && message.hasOwnProperty("y"))
            object.y = message.y;
        if (message.frogType != null && message.hasOwnProperty("frogType"))
            object.frogType = message.frogType;
        if (message.level != null && message.hasOwnProperty("level"))
            object.level = message.level;
        if (message.lineLength != null && message.hasOwnProperty("lineLength"))
            object.lineLength = message.lineLength;
        if (message.roomId != null && message.hasOwnProperty("roomId"))
            object.roomId = message.roomId;
        if (message.ishadLine != null && message.hasOwnProperty("ishadLine"))
            object.ishadLine = message.ishadLine;
        if (message.propStates != null && message.hasOwnProperty("propStates"))
            object.propStates = $root.mPropStates.toObject(message.propStates, options);
        if (message.Death != null && message.hasOwnProperty("Death"))
            object.Death = $root.mDeath.toObject(message.Death, options);
        if (message.NewHandProtect != null && message.hasOwnProperty("NewHandProtect"))
            object.NewHandProtect = $root.mNewHandProtect.toObject(message.NewHandProtect, options);
        if (message.Dressup != null && message.hasOwnProperty("Dressup"))
            object.Dressup = $root.mDressup.toObject(message.Dressup, options);
        return object;
    };

    /**
     * Converts this roomPlayerInfo to JSON.
     * @function toJSON
     * @memberof roomPlayerInfo
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    roomPlayerInfo.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return roomPlayerInfo;
})();

$root.mPropStates = (function() {

    /**
     * Properties of a mPropStates.
     * @exports ImPropStates
     * @interface ImPropStates
     * @property {number} getPropType mPropStates getPropType
     * @property {number|Long} PropStartTime mPropStates PropStartTime
     */

    /**
     * Constructs a new mPropStates.
     * @exports mPropStates
     * @classdesc Represents a mPropStates.
     * @implements ImPropStates
     * @constructor
     * @param {ImPropStates=} [properties] Properties to set
     */
    function mPropStates(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * mPropStates getPropType.
     * @member {number} getPropType
     * @memberof mPropStates
     * @instance
     */
    mPropStates.prototype.getPropType = 0;

    /**
     * mPropStates PropStartTime.
     * @member {number|Long} PropStartTime
     * @memberof mPropStates
     * @instance
     */
    mPropStates.prototype.PropStartTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

    /**
     * Creates a new mPropStates instance using the specified properties.
     * @function create
     * @memberof mPropStates
     * @static
     * @param {ImPropStates=} [properties] Properties to set
     * @returns {mPropStates} mPropStates instance
     */
    mPropStates.create = function create(properties) {
        return new mPropStates(properties);
    };

    /**
     * Encodes the specified mPropStates message. Does not implicitly {@link mPropStates.verify|verify} messages.
     * @function encode
     * @memberof mPropStates
     * @static
     * @param {ImPropStates} message mPropStates message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mPropStates.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.getPropType);
        writer.uint32(/* id 2, wireType 0 =*/16).int64(message.PropStartTime);
        return writer;
    };

    /**
     * Encodes the specified mPropStates message, length delimited. Does not implicitly {@link mPropStates.verify|verify} messages.
     * @function encodeDelimited
     * @memberof mPropStates
     * @static
     * @param {ImPropStates} message mPropStates message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mPropStates.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a mPropStates message from the specified reader or buffer.
     * @function decode
     * @memberof mPropStates
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {mPropStates} mPropStates
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mPropStates.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mPropStates();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.getPropType = reader.int32();
                break;
            case 2:
                message.PropStartTime = reader.int64();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("getPropType"))
            throw $util.ProtocolError("missing required 'getPropType'", { instance: message });
        if (!message.hasOwnProperty("PropStartTime"))
            throw $util.ProtocolError("missing required 'PropStartTime'", { instance: message });
        return message;
    };

    /**
     * Decodes a mPropStates message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof mPropStates
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {mPropStates} mPropStates
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mPropStates.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a mPropStates message.
     * @function verify
     * @memberof mPropStates
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    mPropStates.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.getPropType))
            return "getPropType: integer expected";
        if (!$util.isInteger(message.PropStartTime) && !(message.PropStartTime && $util.isInteger(message.PropStartTime.low) && $util.isInteger(message.PropStartTime.high)))
            return "PropStartTime: integer|Long expected";
        return null;
    };

    /**
     * Creates a mPropStates message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof mPropStates
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {mPropStates} mPropStates
     */
    mPropStates.fromObject = function fromObject(object) {
        if (object instanceof $root.mPropStates)
            return object;
        var message = new $root.mPropStates();
        if (object.getPropType != null)
            message.getPropType = object.getPropType | 0;
        if (object.PropStartTime != null)
            if ($util.Long)
                (message.PropStartTime = $util.Long.fromValue(object.PropStartTime)).unsigned = false;
            else if (typeof object.PropStartTime === "string")
                message.PropStartTime = parseInt(object.PropStartTime, 10);
            else if (typeof object.PropStartTime === "number")
                message.PropStartTime = object.PropStartTime;
            else if (typeof object.PropStartTime === "object")
                message.PropStartTime = new $util.LongBits(object.PropStartTime.low >>> 0, object.PropStartTime.high >>> 0).toNumber();
        return message;
    };

    /**
     * Creates a plain object from a mPropStates message. Also converts values to other types if specified.
     * @function toObject
     * @memberof mPropStates
     * @static
     * @param {mPropStates} message mPropStates
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    mPropStates.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.getPropType = 0;
            if ($util.Long) {
                var long = new $util.Long(0, 0, false);
                object.PropStartTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
            } else
                object.PropStartTime = options.longs === String ? "0" : 0;
        }
        if (message.getPropType != null && message.hasOwnProperty("getPropType"))
            object.getPropType = message.getPropType;
        if (message.PropStartTime != null && message.hasOwnProperty("PropStartTime"))
            if (typeof message.PropStartTime === "number")
                object.PropStartTime = options.longs === String ? String(message.PropStartTime) : message.PropStartTime;
            else
                object.PropStartTime = options.longs === String ? $util.Long.prototype.toString.call(message.PropStartTime) : options.longs === Number ? new $util.LongBits(message.PropStartTime.low >>> 0, message.PropStartTime.high >>> 0).toNumber() : message.PropStartTime;
        return object;
    };

    /**
     * Converts this mPropStates to JSON.
     * @function toJSON
     * @memberof mPropStates
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    mPropStates.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return mPropStates;
})();

$root.mDeath = (function() {

    /**
     * Properties of a mDeath.
     * @exports ImDeath
     * @interface ImDeath
     * @property {boolean} isDeath mDeath isDeath
     * @property {number|Long} deadStartTime mDeath deadStartTime
     */

    /**
     * Constructs a new mDeath.
     * @exports mDeath
     * @classdesc Represents a mDeath.
     * @implements ImDeath
     * @constructor
     * @param {ImDeath=} [properties] Properties to set
     */
    function mDeath(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * mDeath isDeath.
     * @member {boolean} isDeath
     * @memberof mDeath
     * @instance
     */
    mDeath.prototype.isDeath = false;

    /**
     * mDeath deadStartTime.
     * @member {number|Long} deadStartTime
     * @memberof mDeath
     * @instance
     */
    mDeath.prototype.deadStartTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

    /**
     * Creates a new mDeath instance using the specified properties.
     * @function create
     * @memberof mDeath
     * @static
     * @param {ImDeath=} [properties] Properties to set
     * @returns {mDeath} mDeath instance
     */
    mDeath.create = function create(properties) {
        return new mDeath(properties);
    };

    /**
     * Encodes the specified mDeath message. Does not implicitly {@link mDeath.verify|verify} messages.
     * @function encode
     * @memberof mDeath
     * @static
     * @param {ImDeath} message mDeath message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mDeath.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).bool(message.isDeath);
        writer.uint32(/* id 2, wireType 0 =*/16).int64(message.deadStartTime);
        return writer;
    };

    /**
     * Encodes the specified mDeath message, length delimited. Does not implicitly {@link mDeath.verify|verify} messages.
     * @function encodeDelimited
     * @memberof mDeath
     * @static
     * @param {ImDeath} message mDeath message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mDeath.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a mDeath message from the specified reader or buffer.
     * @function decode
     * @memberof mDeath
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {mDeath} mDeath
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mDeath.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mDeath();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.isDeath = reader.bool();
                break;
            case 2:
                message.deadStartTime = reader.int64();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("isDeath"))
            throw $util.ProtocolError("missing required 'isDeath'", { instance: message });
        if (!message.hasOwnProperty("deadStartTime"))
            throw $util.ProtocolError("missing required 'deadStartTime'", { instance: message });
        return message;
    };

    /**
     * Decodes a mDeath message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof mDeath
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {mDeath} mDeath
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mDeath.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a mDeath message.
     * @function verify
     * @memberof mDeath
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    mDeath.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (typeof message.isDeath !== "boolean")
            return "isDeath: boolean expected";
        if (!$util.isInteger(message.deadStartTime) && !(message.deadStartTime && $util.isInteger(message.deadStartTime.low) && $util.isInteger(message.deadStartTime.high)))
            return "deadStartTime: integer|Long expected";
        return null;
    };

    /**
     * Creates a mDeath message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof mDeath
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {mDeath} mDeath
     */
    mDeath.fromObject = function fromObject(object) {
        if (object instanceof $root.mDeath)
            return object;
        var message = new $root.mDeath();
        if (object.isDeath != null)
            message.isDeath = Boolean(object.isDeath);
        if (object.deadStartTime != null)
            if ($util.Long)
                (message.deadStartTime = $util.Long.fromValue(object.deadStartTime)).unsigned = false;
            else if (typeof object.deadStartTime === "string")
                message.deadStartTime = parseInt(object.deadStartTime, 10);
            else if (typeof object.deadStartTime === "number")
                message.deadStartTime = object.deadStartTime;
            else if (typeof object.deadStartTime === "object")
                message.deadStartTime = new $util.LongBits(object.deadStartTime.low >>> 0, object.deadStartTime.high >>> 0).toNumber();
        return message;
    };

    /**
     * Creates a plain object from a mDeath message. Also converts values to other types if specified.
     * @function toObject
     * @memberof mDeath
     * @static
     * @param {mDeath} message mDeath
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    mDeath.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.isDeath = false;
            if ($util.Long) {
                var long = new $util.Long(0, 0, false);
                object.deadStartTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
            } else
                object.deadStartTime = options.longs === String ? "0" : 0;
        }
        if (message.isDeath != null && message.hasOwnProperty("isDeath"))
            object.isDeath = message.isDeath;
        if (message.deadStartTime != null && message.hasOwnProperty("deadStartTime"))
            if (typeof message.deadStartTime === "number")
                object.deadStartTime = options.longs === String ? String(message.deadStartTime) : message.deadStartTime;
            else
                object.deadStartTime = options.longs === String ? $util.Long.prototype.toString.call(message.deadStartTime) : options.longs === Number ? new $util.LongBits(message.deadStartTime.low >>> 0, message.deadStartTime.high >>> 0).toNumber() : message.deadStartTime;
        return object;
    };

    /**
     * Converts this mDeath to JSON.
     * @function toJSON
     * @memberof mDeath
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    mDeath.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return mDeath;
})();

$root.mNewHandProtect = (function() {

    /**
     * Properties of a mNewHandProtect.
     * @exports ImNewHandProtect
     * @interface ImNewHandProtect
     * @property {boolean} isProtect mNewHandProtect isProtect
     * @property {number|Long} ProtectStartTime mNewHandProtect ProtectStartTime
     */

    /**
     * Constructs a new mNewHandProtect.
     * @exports mNewHandProtect
     * @classdesc Represents a mNewHandProtect.
     * @implements ImNewHandProtect
     * @constructor
     * @param {ImNewHandProtect=} [properties] Properties to set
     */
    function mNewHandProtect(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * mNewHandProtect isProtect.
     * @member {boolean} isProtect
     * @memberof mNewHandProtect
     * @instance
     */
    mNewHandProtect.prototype.isProtect = false;

    /**
     * mNewHandProtect ProtectStartTime.
     * @member {number|Long} ProtectStartTime
     * @memberof mNewHandProtect
     * @instance
     */
    mNewHandProtect.prototype.ProtectStartTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

    /**
     * Creates a new mNewHandProtect instance using the specified properties.
     * @function create
     * @memberof mNewHandProtect
     * @static
     * @param {ImNewHandProtect=} [properties] Properties to set
     * @returns {mNewHandProtect} mNewHandProtect instance
     */
    mNewHandProtect.create = function create(properties) {
        return new mNewHandProtect(properties);
    };

    /**
     * Encodes the specified mNewHandProtect message. Does not implicitly {@link mNewHandProtect.verify|verify} messages.
     * @function encode
     * @memberof mNewHandProtect
     * @static
     * @param {ImNewHandProtect} message mNewHandProtect message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mNewHandProtect.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).bool(message.isProtect);
        writer.uint32(/* id 2, wireType 0 =*/16).int64(message.ProtectStartTime);
        return writer;
    };

    /**
     * Encodes the specified mNewHandProtect message, length delimited. Does not implicitly {@link mNewHandProtect.verify|verify} messages.
     * @function encodeDelimited
     * @memberof mNewHandProtect
     * @static
     * @param {ImNewHandProtect} message mNewHandProtect message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mNewHandProtect.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a mNewHandProtect message from the specified reader or buffer.
     * @function decode
     * @memberof mNewHandProtect
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {mNewHandProtect} mNewHandProtect
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mNewHandProtect.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mNewHandProtect();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.isProtect = reader.bool();
                break;
            case 2:
                message.ProtectStartTime = reader.int64();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("isProtect"))
            throw $util.ProtocolError("missing required 'isProtect'", { instance: message });
        if (!message.hasOwnProperty("ProtectStartTime"))
            throw $util.ProtocolError("missing required 'ProtectStartTime'", { instance: message });
        return message;
    };

    /**
     * Decodes a mNewHandProtect message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof mNewHandProtect
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {mNewHandProtect} mNewHandProtect
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mNewHandProtect.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a mNewHandProtect message.
     * @function verify
     * @memberof mNewHandProtect
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    mNewHandProtect.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (typeof message.isProtect !== "boolean")
            return "isProtect: boolean expected";
        if (!$util.isInteger(message.ProtectStartTime) && !(message.ProtectStartTime && $util.isInteger(message.ProtectStartTime.low) && $util.isInteger(message.ProtectStartTime.high)))
            return "ProtectStartTime: integer|Long expected";
        return null;
    };

    /**
     * Creates a mNewHandProtect message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof mNewHandProtect
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {mNewHandProtect} mNewHandProtect
     */
    mNewHandProtect.fromObject = function fromObject(object) {
        if (object instanceof $root.mNewHandProtect)
            return object;
        var message = new $root.mNewHandProtect();
        if (object.isProtect != null)
            message.isProtect = Boolean(object.isProtect);
        if (object.ProtectStartTime != null)
            if ($util.Long)
                (message.ProtectStartTime = $util.Long.fromValue(object.ProtectStartTime)).unsigned = false;
            else if (typeof object.ProtectStartTime === "string")
                message.ProtectStartTime = parseInt(object.ProtectStartTime, 10);
            else if (typeof object.ProtectStartTime === "number")
                message.ProtectStartTime = object.ProtectStartTime;
            else if (typeof object.ProtectStartTime === "object")
                message.ProtectStartTime = new $util.LongBits(object.ProtectStartTime.low >>> 0, object.ProtectStartTime.high >>> 0).toNumber();
        return message;
    };

    /**
     * Creates a plain object from a mNewHandProtect message. Also converts values to other types if specified.
     * @function toObject
     * @memberof mNewHandProtect
     * @static
     * @param {mNewHandProtect} message mNewHandProtect
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    mNewHandProtect.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.isProtect = false;
            if ($util.Long) {
                var long = new $util.Long(0, 0, false);
                object.ProtectStartTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
            } else
                object.ProtectStartTime = options.longs === String ? "0" : 0;
        }
        if (message.isProtect != null && message.hasOwnProperty("isProtect"))
            object.isProtect = message.isProtect;
        if (message.ProtectStartTime != null && message.hasOwnProperty("ProtectStartTime"))
            if (typeof message.ProtectStartTime === "number")
                object.ProtectStartTime = options.longs === String ? String(message.ProtectStartTime) : message.ProtectStartTime;
            else
                object.ProtectStartTime = options.longs === String ? $util.Long.prototype.toString.call(message.ProtectStartTime) : options.longs === Number ? new $util.LongBits(message.ProtectStartTime.low >>> 0, message.ProtectStartTime.high >>> 0).toNumber() : message.ProtectStartTime;
        return object;
    };

    /**
     * Converts this mNewHandProtect to JSON.
     * @function toJSON
     * @memberof mNewHandProtect
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    mNewHandProtect.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return mNewHandProtect;
})();

$root.mDressup = (function() {

    /**
     * Properties of a mDressup.
     * @exports ImDressup
     * @interface ImDressup
     * @property {number} decorateId mDressup decorateId
     * @property {number} trailingId mDressup trailingId
     */

    /**
     * Constructs a new mDressup.
     * @exports mDressup
     * @classdesc Represents a mDressup.
     * @implements ImDressup
     * @constructor
     * @param {ImDressup=} [properties] Properties to set
     */
    function mDressup(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * mDressup decorateId.
     * @member {number} decorateId
     * @memberof mDressup
     * @instance
     */
    mDressup.prototype.decorateId = 0;

    /**
     * mDressup trailingId.
     * @member {number} trailingId
     * @memberof mDressup
     * @instance
     */
    mDressup.prototype.trailingId = 0;

    /**
     * Creates a new mDressup instance using the specified properties.
     * @function create
     * @memberof mDressup
     * @static
     * @param {ImDressup=} [properties] Properties to set
     * @returns {mDressup} mDressup instance
     */
    mDressup.create = function create(properties) {
        return new mDressup(properties);
    };

    /**
     * Encodes the specified mDressup message. Does not implicitly {@link mDressup.verify|verify} messages.
     * @function encode
     * @memberof mDressup
     * @static
     * @param {ImDressup} message mDressup message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mDressup.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.decorateId);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.trailingId);
        return writer;
    };

    /**
     * Encodes the specified mDressup message, length delimited. Does not implicitly {@link mDressup.verify|verify} messages.
     * @function encodeDelimited
     * @memberof mDressup
     * @static
     * @param {ImDressup} message mDressup message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mDressup.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a mDressup message from the specified reader or buffer.
     * @function decode
     * @memberof mDressup
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {mDressup} mDressup
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mDressup.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mDressup();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.decorateId = reader.int32();
                break;
            case 2:
                message.trailingId = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("decorateId"))
            throw $util.ProtocolError("missing required 'decorateId'", { instance: message });
        if (!message.hasOwnProperty("trailingId"))
            throw $util.ProtocolError("missing required 'trailingId'", { instance: message });
        return message;
    };

    /**
     * Decodes a mDressup message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof mDressup
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {mDressup} mDressup
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mDressup.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a mDressup message.
     * @function verify
     * @memberof mDressup
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    mDressup.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.decorateId))
            return "decorateId: integer expected";
        if (!$util.isInteger(message.trailingId))
            return "trailingId: integer expected";
        return null;
    };

    /**
     * Creates a mDressup message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof mDressup
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {mDressup} mDressup
     */
    mDressup.fromObject = function fromObject(object) {
        if (object instanceof $root.mDressup)
            return object;
        var message = new $root.mDressup();
        if (object.decorateId != null)
            message.decorateId = object.decorateId | 0;
        if (object.trailingId != null)
            message.trailingId = object.trailingId | 0;
        return message;
    };

    /**
     * Creates a plain object from a mDressup message. Also converts values to other types if specified.
     * @function toObject
     * @memberof mDressup
     * @static
     * @param {mDressup} message mDressup
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    mDressup.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.decorateId = 0;
            object.trailingId = 0;
        }
        if (message.decorateId != null && message.hasOwnProperty("decorateId"))
            object.decorateId = message.decorateId;
        if (message.trailingId != null && message.hasOwnProperty("trailingId"))
            object.trailingId = message.trailingId;
        return object;
    };

    /**
     * Converts this mDressup to JSON.
     * @function toJSON
     * @memberof mDressup
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    mDressup.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return mDressup;
})();

$root.mPoint = (function() {

    /**
     * Properties of a mPoint.
     * @exports ImPoint
     * @interface ImPoint
     * @property {number} x mPoint x
     * @property {number} y mPoint y
     */

    /**
     * Constructs a new mPoint.
     * @exports mPoint
     * @classdesc Represents a mPoint.
     * @implements ImPoint
     * @constructor
     * @param {ImPoint=} [properties] Properties to set
     */
    function mPoint(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * mPoint x.
     * @member {number} x
     * @memberof mPoint
     * @instance
     */
    mPoint.prototype.x = 0;

    /**
     * mPoint y.
     * @member {number} y
     * @memberof mPoint
     * @instance
     */
    mPoint.prototype.y = 0;

    /**
     * Creates a new mPoint instance using the specified properties.
     * @function create
     * @memberof mPoint
     * @static
     * @param {ImPoint=} [properties] Properties to set
     * @returns {mPoint} mPoint instance
     */
    mPoint.create = function create(properties) {
        return new mPoint(properties);
    };

    /**
     * Encodes the specified mPoint message. Does not implicitly {@link mPoint.verify|verify} messages.
     * @function encode
     * @memberof mPoint
     * @static
     * @param {ImPoint} message mPoint message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mPoint.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.x);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.y);
        return writer;
    };

    /**
     * Encodes the specified mPoint message, length delimited. Does not implicitly {@link mPoint.verify|verify} messages.
     * @function encodeDelimited
     * @memberof mPoint
     * @static
     * @param {ImPoint} message mPoint message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mPoint.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a mPoint message from the specified reader or buffer.
     * @function decode
     * @memberof mPoint
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {mPoint} mPoint
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mPoint.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mPoint();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.x = reader.int32();
                break;
            case 2:
                message.y = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("x"))
            throw $util.ProtocolError("missing required 'x'", { instance: message });
        if (!message.hasOwnProperty("y"))
            throw $util.ProtocolError("missing required 'y'", { instance: message });
        return message;
    };

    /**
     * Decodes a mPoint message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof mPoint
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {mPoint} mPoint
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mPoint.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a mPoint message.
     * @function verify
     * @memberof mPoint
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    mPoint.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.x))
            return "x: integer expected";
        if (!$util.isInteger(message.y))
            return "y: integer expected";
        return null;
    };

    /**
     * Creates a mPoint message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof mPoint
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {mPoint} mPoint
     */
    mPoint.fromObject = function fromObject(object) {
        if (object instanceof $root.mPoint)
            return object;
        var message = new $root.mPoint();
        if (object.x != null)
            message.x = object.x | 0;
        if (object.y != null)
            message.y = object.y | 0;
        return message;
    };

    /**
     * Creates a plain object from a mPoint message. Also converts values to other types if specified.
     * @function toObject
     * @memberof mPoint
     * @static
     * @param {mPoint} message mPoint
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    mPoint.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.x = 0;
            object.y = 0;
        }
        if (message.x != null && message.hasOwnProperty("x"))
            object.x = message.x;
        if (message.y != null && message.hasOwnProperty("y"))
            object.y = message.y;
        return object;
    };

    /**
     * Converts this mPoint to JSON.
     * @function toJSON
     * @memberof mPoint
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    mPoint.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return mPoint;
})();

$root.mLine = (function() {

    /**
     * Properties of a mLine.
     * @exports ImLine
     * @interface ImLine
     * @property {number} uOI mLine uOI
     * @property {number} uTI mLine uTI
     * @property {ImPoint} uO mLine uO
     * @property {ImPoint} uT mLine uT
     * @property {number} t mLine t
     * @property {number} i mLine i
     */

    /**
     * Constructs a new mLine.
     * @exports mLine
     * @classdesc Represents a mLine.
     * @implements ImLine
     * @constructor
     * @param {ImLine=} [properties] Properties to set
     */
    function mLine(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * mLine uOI.
     * @member {number} uOI
     * @memberof mLine
     * @instance
     */
    mLine.prototype.uOI = 0;

    /**
     * mLine uTI.
     * @member {number} uTI
     * @memberof mLine
     * @instance
     */
    mLine.prototype.uTI = 0;

    /**
     * mLine uO.
     * @member {ImPoint} uO
     * @memberof mLine
     * @instance
     */
    mLine.prototype.uO = null;

    /**
     * mLine uT.
     * @member {ImPoint} uT
     * @memberof mLine
     * @instance
     */
    mLine.prototype.uT = null;

    /**
     * mLine t.
     * @member {number} t
     * @memberof mLine
     * @instance
     */
    mLine.prototype.t = 0;

    /**
     * mLine i.
     * @member {number} i
     * @memberof mLine
     * @instance
     */
    mLine.prototype.i = 0;

    /**
     * Creates a new mLine instance using the specified properties.
     * @function create
     * @memberof mLine
     * @static
     * @param {ImLine=} [properties] Properties to set
     * @returns {mLine} mLine instance
     */
    mLine.create = function create(properties) {
        return new mLine(properties);
    };

    /**
     * Encodes the specified mLine message. Does not implicitly {@link mLine.verify|verify} messages.
     * @function encode
     * @memberof mLine
     * @static
     * @param {ImLine} message mLine message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mLine.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.uOI);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.uTI);
        $root.mPoint.encode(message.uO, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
        $root.mPoint.encode(message.uT, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
        writer.uint32(/* id 5, wireType 0 =*/40).int32(message.t);
        writer.uint32(/* id 6, wireType 0 =*/48).int32(message.i);
        return writer;
    };

    /**
     * Encodes the specified mLine message, length delimited. Does not implicitly {@link mLine.verify|verify} messages.
     * @function encodeDelimited
     * @memberof mLine
     * @static
     * @param {ImLine} message mLine message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mLine.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a mLine message from the specified reader or buffer.
     * @function decode
     * @memberof mLine
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {mLine} mLine
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mLine.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mLine();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.uOI = reader.int32();
                break;
            case 2:
                message.uTI = reader.int32();
                break;
            case 3:
                message.uO = $root.mPoint.decode(reader, reader.uint32());
                break;
            case 4:
                message.uT = $root.mPoint.decode(reader, reader.uint32());
                break;
            case 5:
                message.t = reader.int32();
                break;
            case 6:
                message.i = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("uOI"))
            throw $util.ProtocolError("missing required 'uOI'", { instance: message });
        if (!message.hasOwnProperty("uTI"))
            throw $util.ProtocolError("missing required 'uTI'", { instance: message });
        if (!message.hasOwnProperty("uO"))
            throw $util.ProtocolError("missing required 'uO'", { instance: message });
        if (!message.hasOwnProperty("uT"))
            throw $util.ProtocolError("missing required 'uT'", { instance: message });
        if (!message.hasOwnProperty("t"))
            throw $util.ProtocolError("missing required 't'", { instance: message });
        if (!message.hasOwnProperty("i"))
            throw $util.ProtocolError("missing required 'i'", { instance: message });
        return message;
    };

    /**
     * Decodes a mLine message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof mLine
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {mLine} mLine
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mLine.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a mLine message.
     * @function verify
     * @memberof mLine
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    mLine.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (!$util.isInteger(message.uOI))
            return "uOI: integer expected";
        if (!$util.isInteger(message.uTI))
            return "uTI: integer expected";
        {
            var error = $root.mPoint.verify(message.uO);
            if (error)
                return "uO." + error;
        }
        {
            var error = $root.mPoint.verify(message.uT);
            if (error)
                return "uT." + error;
        }
        if (!$util.isInteger(message.t))
            return "t: integer expected";
        if (!$util.isInteger(message.i))
            return "i: integer expected";
        return null;
    };

    /**
     * Creates a mLine message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof mLine
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {mLine} mLine
     */
    mLine.fromObject = function fromObject(object) {
        if (object instanceof $root.mLine)
            return object;
        var message = new $root.mLine();
        if (object.uOI != null)
            message.uOI = object.uOI | 0;
        if (object.uTI != null)
            message.uTI = object.uTI | 0;
        if (object.uO != null) {
            if (typeof object.uO !== "object")
                throw TypeError(".mLine.uO: object expected");
            message.uO = $root.mPoint.fromObject(object.uO);
        }
        if (object.uT != null) {
            if (typeof object.uT !== "object")
                throw TypeError(".mLine.uT: object expected");
            message.uT = $root.mPoint.fromObject(object.uT);
        }
        if (object.t != null)
            message.t = object.t | 0;
        if (object.i != null)
            message.i = object.i | 0;
        return message;
    };

    /**
     * Creates a plain object from a mLine message. Also converts values to other types if specified.
     * @function toObject
     * @memberof mLine
     * @static
     * @param {mLine} message mLine
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    mLine.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.uOI = 0;
            object.uTI = 0;
            object.uO = null;
            object.uT = null;
            object.t = 0;
            object.i = 0;
        }
        if (message.uOI != null && message.hasOwnProperty("uOI"))
            object.uOI = message.uOI;
        if (message.uTI != null && message.hasOwnProperty("uTI"))
            object.uTI = message.uTI;
        if (message.uO != null && message.hasOwnProperty("uO"))
            object.uO = $root.mPoint.toObject(message.uO, options);
        if (message.uT != null && message.hasOwnProperty("uT"))
            object.uT = $root.mPoint.toObject(message.uT, options);
        if (message.t != null && message.hasOwnProperty("t"))
            object.t = message.t;
        if (message.i != null && message.hasOwnProperty("i"))
            object.i = message.i;
        return object;
    };

    /**
     * Converts this mLine to JSON.
     * @function toJSON
     * @memberof mLine
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    mLine.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return mLine;
})();

$root.mProp = (function() {

    /**
     * Properties of a mProp.
     * @exports ImProp
     * @interface ImProp
     * @property {boolean} isUsed mProp isUsed
     * @property {number} id mProp id
     * @property {ImPoint} point mProp point
     * @property {number} type mProp type
     */

    /**
     * Constructs a new mProp.
     * @exports mProp
     * @classdesc Represents a mProp.
     * @implements ImProp
     * @constructor
     * @param {ImProp=} [properties] Properties to set
     */
    function mProp(properties) {
        if (properties)
            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                if (properties[keys[i]] != null)
                    this[keys[i]] = properties[keys[i]];
    }

    /**
     * mProp isUsed.
     * @member {boolean} isUsed
     * @memberof mProp
     * @instance
     */
    mProp.prototype.isUsed = false;

    /**
     * mProp id.
     * @member {number} id
     * @memberof mProp
     * @instance
     */
    mProp.prototype.id = 0;

    /**
     * mProp point.
     * @member {ImPoint} point
     * @memberof mProp
     * @instance
     */
    mProp.prototype.point = null;

    /**
     * mProp type.
     * @member {number} type
     * @memberof mProp
     * @instance
     */
    mProp.prototype.type = 0;

    /**
     * Creates a new mProp instance using the specified properties.
     * @function create
     * @memberof mProp
     * @static
     * @param {ImProp=} [properties] Properties to set
     * @returns {mProp} mProp instance
     */
    mProp.create = function create(properties) {
        return new mProp(properties);
    };

    /**
     * Encodes the specified mProp message. Does not implicitly {@link mProp.verify|verify} messages.
     * @function encode
     * @memberof mProp
     * @static
     * @param {ImProp} message mProp message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mProp.encode = function encode(message, writer) {
        if (!writer)
            writer = $Writer.create();
        writer.uint32(/* id 1, wireType 0 =*/8).bool(message.isUsed);
        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.id);
        $root.mPoint.encode(message.point, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
        writer.uint32(/* id 4, wireType 0 =*/32).int32(message.type);
        return writer;
    };

    /**
     * Encodes the specified mProp message, length delimited. Does not implicitly {@link mProp.verify|verify} messages.
     * @function encodeDelimited
     * @memberof mProp
     * @static
     * @param {ImProp} message mProp message or plain object to encode
     * @param {$protobuf.Writer} [writer] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    mProp.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer).ldelim();
    };

    /**
     * Decodes a mProp message from the specified reader or buffer.
     * @function decode
     * @memberof mProp
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @param {number} [length] Message length if known beforehand
     * @returns {mProp} mProp
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mProp.decode = function decode(reader, length) {
        if (!(reader instanceof $Reader))
            reader = $Reader.create(reader);
        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mProp();
        while (reader.pos < end) {
            var tag = reader.uint32();
            switch (tag >>> 3) {
            case 1:
                message.isUsed = reader.bool();
                break;
            case 2:
                message.id = reader.int32();
                break;
            case 3:
                message.point = $root.mPoint.decode(reader, reader.uint32());
                break;
            case 4:
                message.type = reader.int32();
                break;
            default:
                reader.skipType(tag & 7);
                break;
            }
        }
        if (!message.hasOwnProperty("isUsed"))
            throw $util.ProtocolError("missing required 'isUsed'", { instance: message });
        if (!message.hasOwnProperty("id"))
            throw $util.ProtocolError("missing required 'id'", { instance: message });
        if (!message.hasOwnProperty("point"))
            throw $util.ProtocolError("missing required 'point'", { instance: message });
        if (!message.hasOwnProperty("type"))
            throw $util.ProtocolError("missing required 'type'", { instance: message });
        return message;
    };

    /**
     * Decodes a mProp message from the specified reader or buffer, length delimited.
     * @function decodeDelimited
     * @memberof mProp
     * @static
     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
     * @returns {mProp} mProp
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    mProp.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof $Reader))
            reader = new $Reader(reader);
        return this.decode(reader, reader.uint32());
    };

    /**
     * Verifies a mProp message.
     * @function verify
     * @memberof mProp
     * @static
     * @param {Object.<string,*>} message Plain object to verify
     * @returns {string|null} `null` if valid, otherwise the reason why it is not
     */
    mProp.verify = function verify(message) {
        if (typeof message !== "object" || message === null)
            return "object expected";
        if (typeof message.isUsed !== "boolean")
            return "isUsed: boolean expected";
        if (!$util.isInteger(message.id))
            return "id: integer expected";
        {
            var error = $root.mPoint.verify(message.point);
            if (error)
                return "point." + error;
        }
        if (!$util.isInteger(message.type))
            return "type: integer expected";
        return null;
    };

    /**
     * Creates a mProp message from a plain object. Also converts values to their respective internal types.
     * @function fromObject
     * @memberof mProp
     * @static
     * @param {Object.<string,*>} object Plain object
     * @returns {mProp} mProp
     */
    mProp.fromObject = function fromObject(object) {
        if (object instanceof $root.mProp)
            return object;
        var message = new $root.mProp();
        if (object.isUsed != null)
            message.isUsed = Boolean(object.isUsed);
        if (object.id != null)
            message.id = object.id | 0;
        if (object.point != null) {
            if (typeof object.point !== "object")
                throw TypeError(".mProp.point: object expected");
            message.point = $root.mPoint.fromObject(object.point);
        }
        if (object.type != null)
            message.type = object.type | 0;
        return message;
    };

    /**
     * Creates a plain object from a mProp message. Also converts values to other types if specified.
     * @function toObject
     * @memberof mProp
     * @static
     * @param {mProp} message mProp
     * @param {$protobuf.IConversionOptions} [options] Conversion options
     * @returns {Object.<string,*>} Plain object
     */
    mProp.toObject = function toObject(message, options) {
        if (!options)
            options = {};
        var object = {};
        if (options.defaults) {
            object.isUsed = false;
            object.id = 0;
            object.point = null;
            object.type = 0;
        }
        if (message.isUsed != null && message.hasOwnProperty("isUsed"))
            object.isUsed = message.isUsed;
        if (message.id != null && message.hasOwnProperty("id"))
            object.id = message.id;
        if (message.point != null && message.hasOwnProperty("point"))
            object.point = $root.mPoint.toObject(message.point, options);
        if (message.type != null && message.hasOwnProperty("type"))
            object.type = message.type;
        return object;
    };

    /**
     * Converts this mProp to JSON.
     * @function toJSON
     * @memberof mProp
     * @instance
     * @returns {Object.<string,*>} JSON object
     */
    mProp.prototype.toJSON = function toJSON() {
        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
    };

    return mProp;
})();

module.exports = $root;
